为什么 python 子进程中的十六进制数字未正确传递

Why are hex digits not passed correctly in python subprocess

我无法通过 python subprocess.Popen...使用 2.6.

插入模式

测试:打开python解释器...

import subprocess
a = subprocess.Popen(['ping', '-c 1', '-p ff', '172.16.1.1'],subprocess.PIPE)

结果 ... ping:模式必须指定为十六进制数字。

我已将 ff 替换为:"f"、“23”、23、0x23 和一系列内容。我只想看看 shell 认为它得到了什么。但是 shell=True 并没有像我预期的那样,a.communicate() 给出 (none,none)

确保将所有 "words" 拆分到它们自己的列表条目中:

a = subprocess.Popen(['ping', '-c', '1', '-p' 'ff', '172.16.1.1'],subprocess.PIPE)
# PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.

按照你的方式,你的命令被执行为

ping -c\ 1 -p\ ff 172.16.1.1

(args 和它们的值之间的空格被转义)

除了 Martin Konecny 的回答:导入 shlex 并让它为您完成工作。

subprocess.Popen(shlex.split('ping -c 1 -p ff 127.0.0.1'), subprocess.PIPE)