python - 在 Linux 环境中使用子进程运行 shell 命令时,在 python 2.7 中转义连字符

标签 python

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

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学习入门书。

最佳答案

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)

关于python - 在 Linux 环境中使用子进程运行 shell 命令时,在 python 2.7 中转义连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60369323/

相关文章:

python - sphinx 可以链接到不在根文档下的目录中的文档吗?

python - 从提要内容中获取图标

python - 执行 ImageEnhance.Sharpness() 时出现“无法过滤调色板图像”错误

PYTHON - 从文件中读取单行

python - 为什么这段代码不能作为函数运行?

python - 如何找到混合类型的输入行

python - OpenCV 断言在函数 'setData' 中失败

python - Matplotlib 图例高度(以像素为单位)

python - 在我的 heroku box(Rails 应用程序)上安装一个 python 库,特别是 pycurl

python - 在线读取 csv 时出现错误 Error tokenizing data