#python #bash #scripting #subprocess
Вопрос:
Я схожу с ума.
Эта команда, выполняемая в терминале WSL1 Ubuntu 20.04 внутри Windows10, работает хорошо и создает кучу файлов в текущем каталоге, при наличии исполняемой smilei
папки выше и .py внутри текущей папки.
mpirun -n 1 ../smilei namelist_Xe_GPtrial_noOAM_a0included.py
Теперь я хочу, чтобы он выполнил ту же самую команду, используя Python subprocess
.
Что я делаю не так:
particular_namelist_name = "namelist_Xe_GPtrial_noOAM_a0included.py" cp = subprocess.run(["mpirun", "-n", "1", "../smilei", particular_namelist_name], check=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Это приводит к ошибке:
CalledProcessError: Command '['mpirun', '-n', '1', '../smilei', 'namelist_Xe_GPtrial_noOAM_a0included.py']' returned non-zero exit status 1.
Я попытался отладить его, однако внутри этой папки нет ничего, кроме .py.
Я попытался использовать (для приведенной выше команды, но без значения ключевого слова check=True):
print(cp.stdout) # prints an empty line print(cp.stderr) # prints an empty line print(cp.returncode) # prints 1
Как я могу это отладить? Что я делаю не так? То же самое происходит и с subprocess.Popen(...)
.
Я не хочу использовать shell=True
.
Спасибо!
Комментарии:
1. Как вы запускаете свой сценарий? Используете ли вы Python, установленный в вашей Ubuntu в WSL, или Python, установленный в основной системе Windows?
2. Можете ли вы проверить код возврата на платформе, на которой вы его обычно запускаете?
3. @DmitriOvodok , я запускаю записную книжку jupyter внутри кода Visual Studio, вызванного с помощью $ code . написано внутри терминала WSL1, установленного на ноутбуке Windows10. Затем я нажимаю команду выполнить все из записной книжки (в VSC). Там написано, что переводчик находится по адресу
/bin/python3
. Я могу выбрать между этим и другим переводчиком, расположенным по адресу/usr/bin/python3
.4. @DmitriOvodok, когда я запускаю simple .py внутри терминала WSL1, я пишу
python3 script.py
. Делаяwhich python3
внутри терминала WSL1, я получаю в качестве вывода:/usr/bin/python3
. Итак, я предполагаю, что мне нужно выбрать этот путь интерпретатора внутри VSCode?5. @velenos14 Ошибка может быть вызвана просто относительным путем. Вы можете использовать
os.path.abspath
, чтобы получить полные пути к файлу python иsmilei
файлу. Это исключило бы вероятность ошибки из-за неправильных путей.