python系统调用如何返回?

时间:2014-08-02 17:29:40

标签: python python-2.7

我有一个关于python系统调用行为的可能天真的问题。我想知道在调用cmd之后os.system()是否会立即返回,或者它会等待任何cmd完成返回。

类似于子进程模块的问题。我认为子进程在调用后会返回正确的方式,因为它会生成子进程。但我不确定os.system()。没有关于此的文件。

感谢。

2 个答案:

答案 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函数系统()来实现的   具有相同的局限性。

C system function的文档说

  

system()通过调用/ bin / sh -c执行命令中指定的命令   命令,并在命令完成后返回。

所以它必须等待命令完成。


至于subprocesscallcheck_callcheck_output便利功能都等待命令完成。 callcheck_call明确说明这一点,而check_output将命令的输出作为字节字符串返回,这需要它等待命令完成。

subprocess.Popen不等待命令完成。它有几种方法可以检查命令是否已完成或等待命令完成,例如Popen.wait

答案 1 :(得分:1)

  

在子进程终止之前,system()函数不会返回。

来自Python库引用的http://pubs.opengroup.org/onlinepubs/009695399/functions/system.html

  

这是通过调用标准C函数system()来实现的,并且具有相同的限制。

来自https://docs.python.org/2/library/os.html#os.system