是否有底层概念允许程序(在这种情况下为ls
,检测它是否通过外壳启动?
[我注意到p1
和p2
在Windows上共享相同的stdout,但在Linux上不共享。
导入子过程
cmd = ['ls', '-la']
# Using shell
p1 = subprocess.run(executable=cmd[0], args=cmd[1:], shell=True, text=True, capture_output=True)
# Without using shell
p2 = subprocess.run(executable=cmd[0], args=cmd[1:], shell=False, text=True, capture_output=True)
print(p1.stdout)
print(p2.stdout)
Linux上的输出
total 12
drwxr-xr-x 2 root root 4096 Feb 20 18:25 .
drwx------ 10 root root 4096 Feb 20 18:51 ..
-rw-r--r-- 1 root root 269 Feb 20 18:57 test.py
test.py
没有办法像您一样告诉[[通过查看返回值 run()
调用。
p1
)不存储shell的属性:>>> p1.__dict__
{'args': 'ls', 'returncode': 0, 'stdout': None, 'stderr': None}