我正在使用终端命令
while ! echo exit | nc 10.0.2.11 9445; do sleep 10; done
在我的命令行中查找远程计算机中的端口。(它工作正常)。我想在我的python脚本中执行此操作。我找到了子进程,我想知道如何使用子进程执行此操作?
from subprocess import call
call(["while xxxxxxxxxxxxxxxxxxxxxxxxxxx"])
答案 0 :(得分:1)
subprocess.call
默认情况下不使用shell来运行其命令。因此,while
之类的东西是未知命令。相反,您可以将shell=True
传递给call
(security 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上统一,例如csh
与bash
,并且在其他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文档,因为它更好地概述了安全问题