python - 在 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 的初学者书籍。
解决方案
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-3.x - 从单个 POST 请求创建多个数据库实例
- android - onPaymentSuccess 和 onPaymentError 可能未在您的活动中实现 - Xamarin Android - Razorpay 集成
- android - Android studio daemon not running starting now at tcp 5037 unable to run 'adb':null adb.exe start server failed run manually
- informatica-powercenter - Unable to install Informatica server
- javascript - How to spy on individual functions that are default exports
- python - Pandas 在列中列出唯一值并将其分配给单独的列
- node.js - mongoose - 在 Model.create 中选择特定字段
- flutter - Provider.of(context, listen: false) 是否等同于 context.read()?
- asp.net-mvc - 用户代码未处理空引用异常并且项目为空
- javascript - 选择选项后从下拉列表中选择 2 多选删除选项