我有一个关于python系统调用行为的可能天真的问题。我想知道在调用cmd之后os.system()
是否会立即返回,或者它会等待任何cmd完成返回。
类似于子进程模块的问题。我认为子进程在调用后会返回正确的方式,因为它会生成子进程。但我不确定os.system()
。没有关于此的文件。
感谢。
答案 0 :(得分:1)
os.system
文档说明如下:
在Unix上,返回值是编码进程的退出状态 为wait()指定的格式。请注意,POSIX未指定 C system()函数的返回值的含义,所以返回 Python函数的值取决于系统。
在Windows上,返回值是系统shell返回的值 运行命令后,由Windows环境变量给出 COMSPEC:在command.com系统(Windows 95,98和ME)上始终如此 0;在cmd.exe系统(Windows NT,2000和XP)上,这是退出 命令运行的状态;在使用非本机shell的系统上, 请参阅您的shell文档。
要使os.system
返回这些值,它必须等待程序完成并提供退出代码。此外,它说
这是通过调用标准C函数系统()来实现的 具有相同的局限性。
system()通过调用/ bin / sh -c执行命令中指定的命令 命令,并在命令完成后返回。
所以它必须等待命令完成。
至于subprocess
,call
,check_call
和check_output
便利功能都等待命令完成。 call
和check_call
明确说明这一点,而check_output
将命令的输出作为字节字符串返回,这需要它等待命令完成。
subprocess.Popen
不等待命令完成。它有几种方法可以检查命令是否已完成或等待命令完成,例如Popen.wait
。
答案 1 :(得分:1)
在子进程终止之前,
system()
函数不会返回。
来自Python库引用的http://pubs.opengroup.org/onlinepubs/009695399/functions/system.html:
这是通过调用标准C函数
system()
来实现的,并且具有相同的限制。