Code_Ninja
Code_Ninja

Reputation: 1877

Check if a socket is busy or not

I am new to Socket Programming in Python. I have written the following code in 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)

I am passing the following in the Windows CMD:

python trialSocketList.py "127.0.0.1" 445

But I am having the following error while executing the above code:

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

When I try netstat -an instead of the command tnc 127.0.0.1 -PORT in the same code, the code functions perfectly. I have written the above few lines of code after reading this API.

*I can run tnc command if I hit it directly in Windows cmd.

Am I missing something here? Or is there any other better way of doing this? If so, then please help me understand the issue here.

Thanks in advance.

Upvotes: 3

Views: 1878

Answers (3)

glhr
glhr

Reputation: 4537

tnc is a PowerShell command. You'll need to explicitly run it with PowerShell like this:

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)

Output:

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

Upvotes: 1

xilpex
xilpex

Reputation: 3237

Try calling Popen with shell=True. Here is how your code would look with that:

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 is the listed issue.

Upvotes: 1

Tyler Marshall
Tyler Marshall

Reputation: 488

The issue here is that the python script can't find the tnc program. Either the program is not installed at all, or---if it is installed---it isn't in the PATH variable.

Upvotes: -1

Related Questions