Ответ 1
Проблема заключается в shell=True
. Удалите этот аргумент или передайте все аргументы в виде строки:
Process=Popen('./childdir/execute.sh %s %s' % (str(var1),str(var2),), shell=True)
Оболочка передаст только аргументы, которые вы предоставили в 1-м аргументе Popen
для процесса, так как он интерпретирует сами аргументы.
См. Похожий вопрос здесь. Фактически, ваша оболочка script не получает аргументов, поэтому $1 и $2 пустые.
Popen наследует stdout и stderr из python script, поэтому обычно нет необходимости предоставлять аргументы stdin=
и stderr=
для Popen (если вы не запустите script с перенаправлением вывода, например >
). Вы должны сделать это, только если вам нужно прочитать результат внутри python script и каким-то образом манипулировать им.
Если вам нужно только получить результат (и не против синхронного запуска), я бы рекомендовал попробовать check_output
, так как легче получить вывод, чем Popen
:
output = subprocess.check_output(['./childdir/execute.sh',str(var1),str(var2)])
print(output)
Обратите внимание, что check_output
и check_call
имеют те же правила для аргумента shell=
как Popen
.