使用os.system的python超时



所以,我知道每个人都会告诉我使用子流程模块,但我不能将其用于我正在进行的项目,因为Piping根本不想在我的系统上使用wxpython和py2xe。

所以,我一直在使用os.system调用。我需要知道如何等待这个过程结束。目前,我有

os.system(cmd)

而且我的命令实际上可能需要很长时间才能执行,所以它通常会提前超时。如何使程序等待操作系统?我试过等待,我想这对操作系统不起作用。

我是为windows开发的,所以很遗憾我不能使用fork和execvp。我忙得不可开交:(

您可以更正代码:

os.system('cmd')

关于子流程的额外解释:

import subprocess
ls_output = subprocess.check_output(['ls'])

运行外部命令

要在不与外部命令交互的情况下运行外部命令,例如使用os.system(),请使用call()函数。

import subprocess
# Simple command
subprocess.call('ls -l', shell=True)

$ python replace_os_system.py
total 16
-rw-r--r--   1 root8085  root8085     0 Jul  1 13:27 __init__.py
-rw-r--r--   1 root8085  root8085  1316 Jul  1 13:27 replace_os_system.py
-rw-r--r--   1 root8085  root8085  1167 Jul  1 13:27 replace_os_system.py~

# run cmd
import subprocess
l = subprocess.call(['cmd'])

额外示例:以三种不同的方式进行系统调用:

#! /usr/bin/env python
import subprocess
# Use a sequence of args
return_code = subprocess.call(["echo", "hello sequence"])
# Set shell=true so we can use a simple string for the command
return_code = subprocess.call("echo hello string", shell=True)
# subprocess.call() is equivalent to using subprocess.Popen() and wait()
proc = subprocess.Popen("echo hello popen", shell=True)
return_code = proc.wait() # wait for process to finish so we can get the return code

控制stderr和stdout:

#! /usr/bin/env python
import subprocess
# Put stderr and stdout into pipes
proc = subprocess.Popen("echo hello stdout; echo hello stderr >&2", 
        shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
return_code = proc.wait()
# Read from pipes
for line in proc.stdout:
    print("stdout: " + line.rstrip())
for line in proc.stderr:
    print("stderr: " + line.rstrip())

在另一篇文章中回答了类似的问题。

关键是:

对于子进程,使用subprocess.check_output代替os.system。检查输出支持timeout:

subprocess.check_output(args,*,stdin=无,stderr=无,shell=False,cwd=无,encoding=无,errors=无,universal_newlines=无,超时=无,text=无,**other_popen_kwargs)

最新更新