2013-10-03 4 views
0

Обычно я использую:Выполнить Linux Command и получить PID

os.popen("du folder >> 1.txt ").read() 

Он работал отлично.
Но когда я хотел получить идентификатор подпроцесса, он возвращает пустое значение.

os.popen("du folder >> 1.txt &").read() # Notice the & symbol 

Кто-нибудь знает, почему и как получить ПИД-код?

ответ

4

Вы хотите использовать модуль subprocess.

# Can't use shell=True if you want the pid of `du`, not the 
# shell, so we have to do the redirection to file ourselves 
proc = subprocess.Popen("/usr/bin/du folder", stdout=file("1.txt", "ab")) 
print "PID:", proc.pid 
print "Return code:", proc.wait() 
+0

Я попробовал ваш код под питона 2.7, всегда всплывать некоторые ошибки: Файл «/home/ben/qiime_software/python-2.7.3-release/lib/python2.7/subprocess.py», строка 1249 , в _execute_child raise child_exception OSError: [Errno 2] Нет такого файла или каталога – Ben

+0

Ваша команда 'du' может быть где-то еще. Попробуйте 'which du' узнать где. – AKX

+0

Спасибо за ваш ответ. Правильно/usr/bin/du. – Ben

0

& ставит процесс на задний план и номер задания! = Pid. Чтобы получить pid вашего процесса.

Я предлагаю использовать subprocess - экземпляр Popen имеет атрибут pid, к которому вы можете напрямую обращаться.