Выполнить bash-скрипт из Python в WindowsPython

Программы на Python
Ответить
Anonymous
 Выполнить bash-скрипт из Python в Windows

Сообщение Anonymous »

Я пытаюсь написать сценарий Python, который будет выполнять сценарий Bash, установленный на моем компьютере с Windows. До сих пор я использовал терминал Cygwin, поэтому выполнить bash-скрипт RunModels.scr было так же просто, как ./RunModels.scr. Теперь я хочу иметь возможность использовать подпроцесс Python, но поскольку в Windows нет встроенных функций для обработки bash, я не знаю, что делать.

Я пытаюсь эмулировать ./RunModels.scr < validationInput > validationOutput

Изначально я написал это:

Код: Выделить всё

os.chdir(atm)
vin = open("validationInput", 'r')
vout = open("validationOutput", 'w')
subprocess.call(['./RunModels.scr'], stdin=vin, stdout=vout, shell=True)
vin.close()
vout.close()
os.chdir(home)
Но, потратив некоторое время на то, чтобы выяснить, почему мне было отказано в доступе, я понял, что моя проблема заключалась не в правах доступа к файлу, а в том факте, что я пытался выполнить bash в Windows в целом. Может кто-нибудь объяснить, как выполнить сценарий bash с направленным вводом/выводом в Windows с помощью сценария Python?

Изменить (дополнительный вопрос) :

Спасибо за ответы, мне нужен был полный путь к моему bash.exe в качестве первого параметра. Однако теперь вызовы командной строки из RunModels.scr возвращаются в вывод Python как команда не найдена. Например, ls, cp, make. Есть какие-нибудь предложения по этому поводу?

Последующий шаг 2:
Я обновил свой вызов следующим образом:

Код: Выделить всё

subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')
Теперь я получаю сообщение об ошибке /usr/bin/bash: RunModels.scr: нет такого файла или каталога.
Использование cwd, похоже, не оказывает никакого влияния на эту ошибку, в любом случае подпроцесс ищет в /usr/bin/bash RunModels.scr.

САМООТВЕТ
Мне нужно было указать путь к RunModels.scr в вызове как а также использование cwd.

Код: Выделить всё

subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'C:\\path\\dir_where_RunModels\\RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')
Но другая проблема...

Независимо от указания cwd, команды, выполняемые RunModels.scr, выдают ошибки, как будто RunModels.scr находится в неправильном каталоге. Сценарий выполняется, но cp и cd выдают ошибку: нет такого файла или каталога. Если я перейду к месту, где находится RunModels.scr, через командную строку и выполню его по старинке, я не получу этих ошибок.

Подробнее здесь: https://stackoverflow.com/questions/416 ... on-windows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»