Проверьте, занята ли розетка - PullRequest
3 голосов
/ 10 апреля 2019

Я новичок в Socket Programming на 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)

Я передаю следующее в CMD Windows:

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 в том же коде, код работает отлично.После написания этого API я написал несколько приведенных выше строк кода.

* Я могу запустить команду tnc, если нажму ее непосредственно в Windows cmd.

Я что-то здесь упускаю?Или есть другой лучший способ сделать это?Если так, то, пожалуйста, помогите мне понять проблему здесь.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Попробуйте позвонить Popen с shell=True. Вот как будет выглядеть ваш код с этим:

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)

Здесь является перечисленным вопросом.

1 голос
/ 19 апреля 2019

tnc - это команда PowerShell . Вам нужно будет явно запустить его с 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
0 голосов
/ 10 апреля 2019

Проблема в том, что скрипт python не может найти программу tnc. Либо программа вообще не установлена, либо, если она установлена, ее нет в переменной PATH.

...