首页 > 解决方案 > 在 linux 环境中使用子进程运行 shell 命令时在 python 2.7 中转义 hypen

问题描述

我从这里获得了一些帮助以获取此代码

command="pidstat -ruht"
#command="pidstat"
process = subprocess.Popen(command, stdout=subprocess.PIPE)
while True:
  line = process.stdout.readline()
  if line != '':
    os.write(1, line)
  else:
    break

无论我如何转义,此代码都不起作用 - 因为“pidstat -ruht”或“pidstat \-ruht”尝试了一些其他组合也使用 `, ' 等进行转义(基于其他一些论坛)

有人可以帮忙吗?另外,请指出一本很好的学习 python 的初学者书籍。

标签: python

解决方案


Popen可以运行带有或不带有 shell 处理的程序。默认情况下,Popen需要一个命令列表并跳过 shell。您可以使用shell参数覆盖它。这些中的任何一个都可以工作:

command = ["pidstat", "-ruht"]
process = subprocess.Popen(command, stdout=subprocess.PIPE)

或者

command="pidstat -ruht"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)

如果您想在命令行上进行 shell 处理(例如,变量替换、管道到其他命令等),那么您要么必须坚持shell=True版本,要么找出 python 等价物。

您还可以将 while 循环更改为

for line in process.stdout:
    os.write(1, line)

推荐阅读