python - 检查套接字是否忙

标签 python subprocess python-sockets

我是 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。

*如果我在 Windows cmd 中直接点击它,我可以运行 tnc 命令。

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

提前致谢。

最佳答案

tncPowerShell 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

关于python - 检查套接字是否忙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618923/

相关文章:

python - 如何使用 Python 运行子进程,等待它退出并以字符串形式获取完整的标准输出?

python-3.5 - 假设 socket.sendto 是非阻塞操作是否安全?

python - 使用 Google Sheets API 将 Google Sheet 文档发布到网络

python - 如何在一列上执行 pandas groupby 操作,但将另一列保留在生成的数据框中

Python 和直接访问命令行实用程序 ifconfig、iwconfig 和 iw

python - 允许用户 www-data (apache) 从 CGI 脚本调用需要 root 权限的 python 脚本

python - 通过命令行播种数据库时出现奇怪的 SSL 错误

python - 为什么这个 python "War"纸牌游戏只玩了几局就卡住了?

Python SocketServer 通过线程本地存储将数据传递到主线程

python - 使用 ssh 从远程主机访问 localhost API