#python #python-2.7 #exit-code
Вопрос:
Я вызываю внешнюю программу из python 2.7, и в качестве входных данных для этой программы у меня есть несколько параметров. У меня нет доступа к коду программы, которую я вызываю. Для некоторых комбинаций этих параметров программа завершает работу и возвращает код выхода без ошибок; обычно «Процесс завершен с кодом выхода -1073741819 (0xC0000005)». Что я хочу сделать, так это: всякий раз, когда он завершается с этим кодом выхода, я хочу, чтобы он перезапускал сценарий с новыми начальными параметрами. Я попробовал кое-что вместе:
parameters1 = [1, 2, 3, 4]
parameters2 = [2, 3, 4, 5]
j = 0
q = 0
while j == 0:
parameter1 = parameters1[q]
parameter2 = parameters2[q]
try:
f3d.run(parameter1 = parameter1, parameter2 = parameter2)
j = 1
except:
pass
Комментарии:
1. Неясно, где вы запускаете внешнюю программу.
f3d.run
по-прежнему является вызовом функции Python.2. Вы также должны включить (полную) ошибку в свой вопрос.
3.
try
—except: pass
как правило, это действительно плохо: он игнорирует каждую ошибку и не обрабатывает их. Ошибки на самом деле-это хорошо, но с помощью попытки, кроме: блока передачи, вы превращаете их в ошибки (ваша программа/данные выходят из строя, но никто об этом не узнает).4. Есть ряд вопросов, связанных с этим сообщением об ошибке (их легко найти); все они, по-видимому, связаны с PyCharm, и иногда повторная установка поможет. Вы используете PyCharm?
5. «Я попробовал кое-что вместе:» Хорошо, и что произошло , когда ты попытался это сделать? Что должно произойти вместо этого, и чем это отличается?
Ответ №1:
Хотя вопрос совершенно неясен, я думаю, что это то, чего вы пытаетесь достичь:
runner.py:
SLEEP_TIME = 3
print('Starting run...')
while True:
exit_code = subprocess.call(['python', 'foo.py', parameter_1, parameter_2])
print('Script Stopped.')
if exit_code == -1073741819:
# change parameter_1 and parameter_2 here
print('Sleeping for %d seconds' % SLEEP_TIME)
time.sleep(SLEEP_TIME)
print('Restarting...')
фу.py:
import sys
parameter_1 = sys.argv[1]
parameter_2 = sys.argv[2]
# Your code here
Вы запускаете runner.py
программу, которая будет перезапускаться бесконечно.
Кроме того, нежелательный совет: Не используйте Python2.7. Это устарело.
Ответ №2:
Большое спасибо за быстрый и хороший ответ! Это то, что я искал. Мне пришлось использовать Python2.7, чтобы быть совместимым с внешним программным обеспечением. Хорошего дня, мой добрый сэр/мадам!
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.