2015-04-03 6 views
0

я следующая функция:Сохранить вывод Баш команды в переменную внутри if..else заявление

def check_process_running(pid_name): 
    if subprocess.call(["pgrep", pid_name]): 
     print pid_name + " is not running" 
    else: 
     print pid_name + " is running and has PID=" 

check_process_running(sys.argv[1]) 

если я бегу сценарий он дает мне:

$ ./test.py firefox 
22977 
firefox is running and has PID= 

Мне нужно, чтобы получить pid_num к работайте с этим процессом. Я узнал, что если я хочу, чтобы создать переменный с выше PID ценностных 22977 можно использовать:

tempvar = subprocess.Popen(['pgrep', sys.argv[1]], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
pid_num = tempvar.stdout.read() 
print pid_num 
22977 

Есть ли решение, где строительство tempvar не требуется, где Идентификатор подобран и сохранен в переменную pid_num в выражении if..else, как оно есть в моей функции? Или что является самым прямым способом создать переменную pid_num с одним вызовом в оболочку с использованием подпроцесса и сохранить функцию такой простой, как сейчас?

EDIT:

С сильфона решение, которое я смог восстановить заявление, сохранить его простым и иметь pid_num работать с процессом дальнейшей:

def check_process_running(pid_name): 
    pid_num = subprocess.Popen(['pgrep', sys.argv[1]], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0] 
    if pid_num:  
     print pid_name + " is running and has PID=" + pid_num 
    else: 
     print pid_name + " is not running" 

ответ

2
pid_number = subprocess.Popen(['pgrep', sys.argv[1]], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0] 

может быть? или, вероятно, лучше

pid_number = subprocess.check_output(['pgrep', sys.argv[1]]) 
Смежные вопросы