如何在python子进程中运行port lookup命令

时间:2014-08-20 07:00:57

标签: python subprocess

我正在使用终端命令

while ! echo exit | nc 10.0.2.11 9445; do sleep 10; done

在我的命令行中查找远程计算机中的端口。(它工作正常)。我想在我的python脚本中执行此操作。我找到了子进程,我想知道如何使用子进程执行此操作?

from subprocess import call
call(["while xxxxxxxxxxxxxxxxxxxxxxxxxxx"])

1 个答案:

答案 0 :(得分:1)

subprocess.call默认情况下不使用shell来运行其命令。因此,while之类的东西是未知命令。相反,您可以将shell=True传递给callsecurity risk with dynamic data and user input *)或直接调用shell(同样的建议适用):

from subprocess import call
call("while ! echo exit | nc 10.0.2.11 9445; do sleep 10; done", shell="True")

或直接使用shell,这是(a)不太便携(因为它假设一个特定的shell)和(b)更安全(因为你可以指定什么shell将被用作语法不在不同的shell上统一,例如cshbash,并且在其他shell上的使用可能导致未定义或不需要的行为):

from subprocess import call
call(["bash", "-c", "while ! echo exit | nc 10.0.2.11 9445; do sleep 10; done"])

shell执行命令的确切参数(此处为-c)取决于您的shell。

您可能希望查看subprocess docs,尤其是其他调用进程的方法。参见例如check_call用于检查成功的返回代码,check_output用于获取流程的标准输出,Popen用于与流程进行高级输入/输出交互。

或者,您可以使用os.system隐式启动shell并返回返回代码(subprocess.check_call shell=True是一种更灵活的替代方法)

* 此链接指向Python 2文档,而不是其他方面使用的Python 3文档,因为它更好地概述了安全问题