我尝试运行的命令如下所示:
xvfb-run --auto-servernum --server-args="-screen 0 640x480x24" --error-file=/dev/stdout /opt/myExecutable
Run Code Online (Sandbox Code Playgroud)
这是我在 Python3 中的内容:
args = ['xvfb-run', '--auto-servernum','--server-args="-screen 0 640x480x24"', '--error-file=/dev/stdout', '/opt/myExecutable']
command = ' '.join(xvfbArgs)
print(f'Command: {command}')
subprocess.run(xvfbArgs)
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
Unrecognized option: "-screen
use: X [:<display>] [option]
...
segfault
...
Command: xvfb-run --auto-servernum --server-args="-screen 0 640x480x24" --error-file=/dev/stdout /opt/myExecutable
Run Code Online (Sandbox Code Playgroud)
打印的命令是正确的。
我也尝试过"-server-args='-screen 0 640x480x24'"(倒置",'这导致了相同的结果(Unrecognized option: '-screen)
发生了什么subprocess.run变化--server-args="-screen 0 640x480x24"?
正确的语法是:
args = [
'xvfb-run',
'--auto-servernum',
'--server-args=-screen 0 640x480x24',
'--error-file=/dev/stdout',
'/opt/myExecutable'
]
try:
from pipes import quote # Python 2
except ImportError:
from shlex import quote # Python 3
command_str = ' '.join(quote(s) for s in args)
print(f'Command: {command_str}')
subprocess.run(args) # or subprocess.run(command_str, shell=True)
Run Code Online (Sandbox Code Playgroud)
请注意,这里根本没有文字引号——唯一的引号是 Python 语法。在 bash 中,未转义的引号是语法,而不是数据,即使它们存在于字符串中的一部分也是如此。
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |