Почему subprocess.run не выполняет простую команду? - PullRequest
1 голос
/ 12 июля 2020

Я запускаю:

Rscript hello_world.R

с моего cmd терминала, где каталог:

C:\Users\Philip\OneDrive\Betting\Capra\Tennis\polgara>

Скрипт работает нормально.

Однако я хочу Python, чтобы запустить его и разместить этот небольшой скрипт в том же каталоге, что и выше:

import subprocess
subprocess.run(['Rscript', 'hello_world.R'])

Однако я получаю эту ошибку, когда запускаю его из VS Code:

Exception has occurred: FileNotFoundError
[WinError 2] The system cannot find the file specified

Затем я попробовал:

subprocess.run(['Rscript', 'hello_world.R'], shell=True)

Но я получил:

'Rscript' is not recognized as an internal or external command, operable program or batch file.

Для справки я добавил в свой путь следующее:

C:\Program Files\R\R-3.6.3\bin\x64

I ' Мы только что пробовали запустить

Rscript hello_world.R

с терминала cmd в VS Code, в котором установлен следующий каталог:

(polgara) C:\Users\Philip\OneDrive\Betting\Capra\Tennis\polgara>

Это также дает ошибку:

'Rscript' is not recognized as an internal or external command, operable program or batch file.

Может ли (polgara) в начале быть источником моей проблемы? Я считаю, что это моя виртуальная среда ...?

1 Ответ

1 голос
/ 13 июля 2020

Обратите внимание на:

Какова причина того, что «X не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл»?

Необходимо перезапустить Windows после модификации системы переменной среды Path, чтобы убедиться, что все процессы работают с обновленным Path.

В общем, любой исполняемый файл может быть запущен из сценария Python без использования Windows командного процессора cmd.exe, что означает без использования shell=True. Но необходимо указать исполняемый файл с полным квалифицированным именем файла, т.е. диск + путь + имя + расширение, если он не находится в текущем каталоге запущенного процесса, который в данном случае python.exe интерпретирует скрипт Python.

Я предлагаю прочитать документацию Microsoft для функции CreateProcessA и других страниц, упомянутых на этой странице, соответственно, перечисленных слева. Все параметры методов Python module subprocess like cwd (текущий рабочий каталог для подпроцесса) легче понять, зная о создании процесса ядром Windows.

Имя файла сценария R, переданное в качестве аргумента для Rscript.exe, также должно быть указано с полным определенным именем файла, которое будет найдено Rscript.exe независимо от того, в каком каталоге находится процесс Rscript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...