& quot; нет такого файла или каталога & quot; в сценарии Python, вызывая другой сценарий Python в Debian Linux

Привет У меня есть следующее написано в Python скрипт pythonscript1.py в Linux Debian в каталоге / home / user / a /:

import subprocess
subprocess.call(["python" /home/user/b/phpcall.py"])

где скрипт phpcall.py содержит:

import subprocess
subprocess.call(["php", "/home/user/b/phpscript1.php"])

При индивидуальном вызове из консоли все сценарии работают отлично, но когда я использую первый сценарий, в то время как второй сценарий вызывает / ищет файл в каталоге b, а не в a, он выдает следующую ошибку:

"PHP warning: include_once(something.php): failed to open stream: no such file in /home/user/b/phpschript1.php on line 25

Теперь мне совершенно ясно, что проблема в том, что он не может выйти из своего исходного каталога. Но я не знаю, какую команду я должен добавить к первому сценарию, чтобы второй сценарий мог смотреть в папке b.

До сих пор результаты поиска в Google предлагали что-то с «include_path = ‘include'», но я не знаю, как / где успешно включить это утверждение.

Будем благодарны за любые предложения по правильному синтаксису!

0

Решение

Вы можете попробовать эту программу:

import subprocess
import sys
proc = subprocess.Popen(
[sys.executable, '/home/user/b/phpcall.py'],stdin=subprocess.PIPE)

proc.communicate()

Я думаю, что это работа. если не дайте знать.

0

Другие решения

Если php скрипт работает, только если вы запускаете его из каталога со скриптом python, тогда вы можете использовать cwd параметр для изменения рабочего каталога для подпроцесса:

#!/usr/bin/env python
from subprocess import check_call

check_call(["php", "/home/user/b/phpscript1.php"], cwd="/home/user/b")

Я добавил Шебанг #!/usr/bin/env python чтобы вы могли запустить скрипт как /path/to/phpcall.py при условии, что это исполняемый (chmod +x phpcall.py).

Примечание: если вы хотите запустить скрипт Python как user пользователь, то вы можете указать путь с помощью ~:

#!/usr/bin/env python
import os
from subprocess import check_call

script_dir = os.path.expanduser("~/b")
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir)

Чтобы избежать жесткого кодирования каталога скриптов, вы можете найти его динамически:

#!/usr/bin/env python
import os
from subprocess import check_call

script_dir = get_script_dir()
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir)

где get_script_dir().

0

Для дальнейшего использования код, который напрямую вызывал скрипт php из python:

import os
os.chdir("/home/user/b")
os.system("php /home/user/b/phpscript1.php")

.Спасибо Марк Б
& Мне нравится динамичный подход Себастьяна, спасибо 🙂

0
По вопросам рекламы [email protected]