Запуск "источника" из питона - PullRequest
0 голосов
/ 17 июня 2010

У меня есть файл a.txt со строками команд, которые я хочу запустить, скажем:

echo 1
echo 2
echo 3

Если бы я был на csh (unix), я бы сделал source a.txt, и он запустился бы. Из Python я хочу запустить os.execl с ним, однако я получаю:

>>> os.execl("source", "a.txt")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/os.py", line 322, in execl
    execv(file, args)
OSError: [Errno 2] No such file or directory

Как это сделать?

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

source не является исполняемой программой, поэтому вы не можете выполнить ее напрямую. Скорее, это встроенная команда в оболочке. Вместо этого вам нужно будет запустить эту оболочку, если вам действительно нужен доступ к ней. Но если вы просто хотите запустить скрипт, вам вообще не нужно использовать исходный код - просто попросите оболочку выполнить ваш скрипт напрямую:

os.execl("/bin/bash", "a.txt")
1 голос
/ 17 июня 2010

Вы не указываете полный путь к source, а os.execl нужен путь.

Если вы хотите использовать переменную PATH env, вам следует использовать os.execlp.

См. Документацию os для модуля .

Хотя, как упоминает @Walter, вы, вероятно, захотите /bin/bash вместо source:

os.execl("/bin/bash", "a.txt")
1 голос
/ 17 июня 2010

Вы просто хотите запустить скрипт? В этом случае вы можете заменить «source» на «bash» и, вероятно, получить то, что вы хотите.

Если вы хотите, чтобы источник вещей имел побочные эффекты для процесса Python, такие как установка переменных среды или чего-то еще, вам, вероятно, не повезло.

...