#python #shell #subprocess
Вопрос:
У меня есть простой скрипт на Python с именем ‘scriptNastran.py’ это вызывает оболочку через функцию подпроцесса:
import subprocess
subprocess.call(['sh', './launchNastran.sh'])
Мой launchNastran.sh является :
/appli/nastran -msc20121 TRAM mem=512M buffsize=25601 batch=no
CHEMIN='/users/develop/tmp/input'
cp -rf TRAM MODELE ./*f06 ./*f04 ./*log ./*op2 ./*pch $CHEMIN
Файлы TRAM и MODELE находятся в том же каталоге, что и оболочка и скрипт Python. Этот каталог отображается в оболочке: CHEMIN='/users/develop/tmp/input
Однако каталог изменяется в скрипте Python, поэтому я хотел бы передать каталог arg_directory, определенный в скрипте Python, в качестве аргумента для оболочки, что-то вроде:
import subprocess
arg_directory = 'hello world'
subprocess.call(['sh', './launchNastran.sh'])
Для скрипта python и вот так для оболочки:
$ scriptNastran.py arg_directory
/appli/nastran -msc20121 TRAM mem=512M buffsize=25601 batch=no
CHEMIN= arg_directory
cp -rf TRAM MODELE ./*f06 ./*f04 ./*log ./*op2 ./*pch $CHEMIN
Знает ли кто-нибудь, как это сделать?
Спасибо вам за вашу помощь 🙂
Комментарии:
1. Ваша цель — запустить
launchNastran.sh
внутри python ИЛИ получить результат от python, а затем перейти кlaunchNastran.sh
сценарию оболочки ?2. Моя цель состоит в том, чтобы запустить launchNastran.sh в пределах python
Ответ №1:
Вы можете передать каталог в качестве аргумента:
import subprocess
arg_directory = 'hello world'
subprocess.call(['sh', './launchNastran.sh', arg_directory])
а затем прочтите это в своем сценарии оболочки
/appli/nastran -msc20121 TRAM mem=512M buffsize=25601 batch=no
CHEMIN="$1"
cp -rf TRAM MODELE ./*f06 ./*f04 ./*log ./*op2 ./*pch "$CHEMIN"
Комментарии:
1. Просто и элегантно! Огромное спасибо
Ответ №2:
launchNastran.py
def call_shell(CHEMIN_path):
import subprocess
ssh_command_string='''
/appli/nastran -msc20121 TRAM mem=512M buffsize=25601 batch=no
CHEMIN={path}
cp -rf TRAM MODELE ./*f06 ./*f04 ./*log ./*op2 ./*pch $CHEMIN
'''.format(path=CHEMIN_path). ## put the path you have in format
subprocess.Popen(ssh_command_string, shell=True)
call_shell('/users/develop/tmp/input') ## call the shell script