Привет У меня есть следующее написано в 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'», но я не знаю, как / где успешно включить это утверждение.
Будем благодарны за любые предложения по правильному синтаксису!
Вы можете попробовать эту программу:
import subprocess
import sys
proc = subprocess.Popen(
[sys.executable, '/home/user/b/phpcall.py'],stdin=subprocess.PIPE)
proc.communicate()
Я думаю, что это работа. если не дайте знать.
Если 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()
.
Для дальнейшего использования код, который напрямую вызывал скрипт php из python:
import os
os.chdir("/home/user/b")
os.system("php /home/user/b/phpscript1.php")
.Спасибо Марк Б
& Мне нравится динамичный подход Себастьяна, спасибо 🙂