【发布时间】:2011-09-14 08:58:37
【问题描述】:
我使用的是 Windows 7,我已经在 Python 2.6.6 和 Python 3.2 下尝试过。
所以我试图从 Python 调用这个命令行:
netstat -ano | find ":80"
在 Windows cmd 下,此行运行良好。
所以,
-
第一次尝试:
output = subprocess.Popen( [r'netstat -ano | find ":80"'], stdout=subprocess.PIPE, shell=True ).communicate()“find”实际上没有收到正确的参数会引发错误(例如“find ":80" \'):
Access denied - \ -
第二次尝试:
#calling netstat cmd_netstat = subprocess.Popen( ['netstat','-ano'], stdout = subprocess.PIPE ) #pipelining netstat result into find cmd_find = subprocess.Popen( ['find','":80"'], stdin = cmd_netstat.stdout, stdout = subprocess.PIPE )再次出现同样的错误。
Access denied - \
我做错了什么? :(
编辑:
-
第三次尝试(正如@Pavel Repin 建议的那样):
cmd_netstat = subprocess.Popen( ['cmd.exe', '-c', 'netstat -ano | find ":80"'], stdout=subprocess.PIPE ).communicate()不幸的是,带有 ['cmd.exe','-c'] 的子进程会导致类似于死锁或空白 cmd 窗口的情况。我假设 cmd 忽略了“-c”,导致communicate() 无限期地等待 cmd 终止。由于这是 Windows,我敢打赌 cmd 只接受以斜杠 (/) 开头的参数。所以我用'/c'替换了'-c':
cmd_netstat = subprocess.Popen( ['cmd.exe', '/c', 'netstat -ano | find ":80"'], stdout=subprocess.PIPE ).communicate()然后...回到同样的错误:
Access denied - \
编辑: 我放弃了,我将在 Python 中处理 'netstat -ano' 返回的字符串。这可能是一个错误吗?
【问题讨论】:
-
在尝试 N1 中,也许这可能有效:
['cmd.exe', '-c', 'netstat -ano | find ":80"']作为 args 数组。在这种情况下,还要删除shell=True。 -
@PavelRepin 刚刚在 Python 2.6.6 和 Python 3.2 中尝试过。不幸的是,带有 ['cmd.exe','-c'] 的子进程会导致类似于死锁或空白 cmd 窗口的情况...
-
(已删除,移至尝试 3)
-
对不起@madeOfMeat,
-c是我的脑残。尝试/c是对的,尽管很遗憾它仍然没有帮助。
标签: python subprocess