2013-11-14 3 views
2

Итак, я все еще преподаю сам Python, и я хотел создать небольшой скрипт для своего сервера, который скажет мне, установлен ли мой жесткий диск, и если он не будет монтировать его для меня, когда я вхожу. (У меня это в ~/.bashrc).Проверка успешного выполнения вызова подпроцесса

Проблема я столкнулся это:

try: 
    with open('/media/Hitachi/mountfile.txt', 'r') as f: 
     print(f.readline()) 
except: 
     print('HDD is not mounted') 
     if not os.path.exists('/media/Hitachi/media'): 
       print('Attempting to mount HDD') 
       script = subprocess.call('mountscript.sh', shell=True) 

Как я могу узнать, если mountscript.sh удалось или нет?

+2

iirc subprocess.call возвращает код выхода .. так что вы могли бы просто проверить, если сценарий == 0? – Gryphius

ответ

0

почему не простой, если/другое заявление и использовать check_call

if os.path.exists('/media/Hitachi/mountfile.txt'): 
    print("it's mounted") 
else: 
    print('HDD is not mounted') 
    if not os.path.exists('/media/Hitachi/media'): 
     print('Attempting to mount HDD') 
     script = subprocess.check_call(['mountscript.sh','2>file.txt'], shell=True) 

Независимо от того, что мораль этой истории является не забыть скобки аргументы команды для subprocess.call() или check_call()

+1

Потому что я пытаюсь научить себя другим методам, поэтому, даже если это менее упрощенно, это учебное упражнение для меня. – Joseph

+0

«Конструкция try-expect используется только для обработки исключений, которые могут выполнять модули. Она никогда не должна использоваться как альтернатива if-else». http://learnpythonthehardway.org/book/ex48.html – Back2Basics

+0

Спасибо :), между прочим, есть ли способ обрезать ошибки unix, которые moutnscript моя встреча в текстовый файл? – Joseph

3

subprocess.call метод возвращает returncode процесса, поэтому вы можете проверить это, чтобы убедиться, что вызов был успешным.

>>> subprocess.call(["ls", "-l"]) 
0 
>>> subprocess.call("exit 1", shell=True) 
1 
Смежные вопросы