检查套接字是否忙

Check if a socket is busy or not

我是 Python 的套接字编程新手。我在Python 3.7中写了下面的代码:

trialSocketList.py

import subprocess
import sys

HOST = sys.argv[1]
PORT = sys.argv[2]

command = "tnc " + HOST + " -PORT "
print(command)
subprocess.call(command + PORT)

我在 Windows CMD 中传递以下内容:

python trialSocketList.py "127.0.0.1" 445

但是我在执行上面的代码时出现了以下错误:

tnc 127.0.0.1 -PORT
Traceback (most recent call last):
  File "trialSocketList.py", line 14, in <module>
    subprocess.call(command + PORT)
  File "C:\Python37\lib\subprocess.py", line 323, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Python37\lib\subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "C:\Python37\lib\subprocess.py", line 1178, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

当我在同一代码中尝试使用 netstat -an 而不是命令 tnc 127.0.0.1 -PORT 时,代码运行完美。以上几行代码是我看完this API.

写的

*我直接在Windowscmd里打就可以运行tnc命令了

我是不是漏掉了什么?或者还有其他更好的方法吗?如果是这样,请帮助我了解这里的问题。

提前致谢。

这里的问题是 python 脚本找不到 tnc 程序。该程序根本没有安装,或者---如果安装了---它不在 PATH 变量中。

尝试用 shell=True 调用 Popen。这是您的代码的外观:

import subprocess
import sys

HOST = sys.argv[1]
PORT = sys.argv[2]

command = "tnc " + HOST + " -PORT "
print(command)
process = subprocess.Popen(command, stdout=tempFile, shell=True)

Here 是列出的问题。

tnc 是一个 PowerShell command。您需要像这样使用 PowerShell 显式 运行 它:

import subprocess
import sys

HOST = "127.0.0.1"
PORT = 445
command = "tnc " + HOST + " -PORT " + str(PORT)
print(command)
subprocess.call(["powershell.exe",command],stdout=sys.stdout)

输出:

tnc 127.0.0.1 -PORT 445

ComputerName     : 127.0.0.1
RemoteAddress    : 127.0.0.1
RemotePort       : 445
InterfaceAlias   : Loopback Pseudo-Interface 1
SourceAddress    : 127.0.0.1
TcpTestSucceeded : True