2012-04-15 3 views
2

В настоящее время я использую python os.system(cmd) для выполнения некоторых ежедневных работ.Python os.system() автоматически завершает работу, когда команда еще не закончена

Вот одна ситуации, ЦМД займет 5-6 минут, чтобы закончить, и я бег этого ЦМДА maually, он работает, но когда я положил его в os.system(cmd), os.system(cmd) автоматически закроется ЦМД еще не закончен.

Итак, мой вопрос: как справиться с этой проблемой, установить значение тайм-аута или есть лучший способ закончить эту работу?

Заранее благодарен!

+0

Да, спасибо Майклу. Я проверяю документ и результат не найден, вы можете указать какой-либо URL-адрес или некоторую информацию здесь, большое спасибо большое –

+0

Что представляет собой строка 'cmd'? – Keith

ответ

3

Вы пробовали модуль subprocess? Он был добавлен для замены os.system среди других более старых методов os. Ниже в значительной степени прямо из документации:

import os 
import subprocess 

proc = subprocess.Popen(cmd, shell=True) 
pid, sts = os.waitpid(proc.pid, 0) 

# you may check on this process later and kill it if it's taking too long 
if proc.poll() in [whatever, ...]: 
    os.kill(proc.pid) 

или если вы пытаетесь отлаживать почему процесс выхода:

import subprocess 
import sys 

try: 
    retcode = subprocess.call(cmd, shell=True) 
    if retcode < 0: 
     print >>sys.stderr, "Child was terminated by signal", -retcode 
    else: 
     print >>sys.stderr, "Child returned", retcode 
except OSError, e: 
    print >>sys.stderr, "Execution failed:", e 
+0

Спасибо mVchr, вы так быстро. Я просто пробую свои пути в Env. Есть несколько вопросов: 1: В моем env, код возврата 233, что это значит? 2 И на самом деле cmd, который я задал в вопросе, это один сценарий оболочки (* .bin), используя питон для вызова и ./***.bin, есть ли другое? Большое спасибо –

+0

1: Это не стандартный код выхода оболочки, о котором я знаю, поэтому вам нужно будет проконсультироваться с процессом, который вы используете ... 2: Это зависит от того, что установлено в #! – mVChr