使用 shlex 和子进程时出错
Error using shlex and subprocess
您好,我正在尝试 运行 在 python 的子进程中使用 shlex split 执行此命令,但是,我没有发现对这种特殊情况有任何帮助:
ifconfig | grep "inet " | grep -v 127.0.0.1 | grep -v 192.* | awk '{print }'
我收到 ifconfig 错误,因为用单引号和双引号分隔,甚至 $ 符号前的白色 space 都不正确。
请帮忙。
可以使用shell=True
(shell会解释|
)和三引号字符串字面量(否则需要在里面转义"
,'
字符串文字):
import subprocess
cmd = r"""ifconfig | grep "inet " | grep -v 127\.0\.0\.1 | grep -v 192\. | awk '{print }'"""
subprocess.call(cmd, shell=True)
或者你可以用更难的方式来做 (Replacing shell pipeline from subprocess
module documentation):
from subprocess import Popen, PIPE, call
p1 = Popen(['ifconfig'], stdout=PIPE)
p2 = Popen(['grep', 'inet '], stdin=p1.stdout, stdout=PIPE)
p3 = Popen(['grep', '-v', r'127\.0\.0\.1'], stdin=p2.stdout, stdout=PIPE)
p4 = Popen(['grep', '-v', r'192\.'], stdin=p3.stdout, stdout=PIPE)
call(['awk', '{print }'], stdin=p4.stdout)
您好,我正在尝试 运行 在 python 的子进程中使用 shlex split 执行此命令,但是,我没有发现对这种特殊情况有任何帮助:
ifconfig | grep "inet " | grep -v 127.0.0.1 | grep -v 192.* | awk '{print }'
我收到 ifconfig 错误,因为用单引号和双引号分隔,甚至 $ 符号前的白色 space 都不正确。 请帮忙。
可以使用shell=True
(shell会解释|
)和三引号字符串字面量(否则需要在里面转义"
,'
字符串文字):
import subprocess
cmd = r"""ifconfig | grep "inet " | grep -v 127\.0\.0\.1 | grep -v 192\. | awk '{print }'"""
subprocess.call(cmd, shell=True)
或者你可以用更难的方式来做 (Replacing shell pipeline from subprocess
module documentation):
from subprocess import Popen, PIPE, call
p1 = Popen(['ifconfig'], stdout=PIPE)
p2 = Popen(['grep', 'inet '], stdin=p1.stdout, stdout=PIPE)
p3 = Popen(['grep', '-v', r'127\.0\.0\.1'], stdin=p2.stdout, stdout=PIPE)
p4 = Popen(['grep', '-v', r'192\.'], stdin=p3.stdout, stdout=PIPE)
call(['awk', '{print }'], stdin=p4.stdout)