#python #execl
#python #execl
Вопрос:
У меня есть программа большего размера (150 строк или около того), но, похоже, это единственная проблема, которая у меня есть. Мне удалось устранить проблему и превратить ее в программу меньшего размера. По сути, программа разветвляется и пытается выполнить команду Linux (я запускаю это в ubuntu). Я получаю следующий вывод:
Current instruction is bin/ls
Current instruction is bin/ls
Child PID is 984
Traceback (most recent call last):
File "./Test.py", line 17 in <module>
makeFork("bin/ls")
File "./Test.py", line 12, in makeFork
os.execl(instruction, instruction)
File "/usr/lib/python2.7/os.py", line 314, in execl
execv(file, args)
OSError: [Errno2] No such file or directory
Parent PID is 4
Ниже приведен код для программы
import os
from time import sleep
os.system("clear")
def makeFork(instruction):
PID = os.fork() #Creating a fork for the child process
sleep(2)
print("Current instruction is " instruction)
if PID == 0:
print("nChild PID is " format(os.getpid()))
os.execl(instruction, instruction)
sleep(2)
print("nParent PID is " format(os.getppid()))
makeFork("bin/ls")
Где я ошибаюсь?
Комментарии:
1. Я бы сказал, что это может быть похоже на опечатку; это не ошибка, конкретно связанная с
os.execl()
(или Python), или что люди, пытающиеся использоватьos.execl()
, с большей вероятностью столкнутся, чем те, кто указывает пути к исполняемым файлам в любом другом контексте (включая контексты, которые вообще не связаны с программированием).2. … вы получите ту же ошибку (даже если она напечатана / отображена по-другому), выполняемую
bin/ls
из некорневого каталога в bash.
Ответ №1:
bin/ls
нет /bin/ls
: имя без начала /
относится к вашему текущему рабочему каталогу, и поэтому для вашего текущего каталога требуется, чтобы у подкаталога с именем, bin
содержащего исполняемый файл ls
.
Поскольку такого каталога не существует, вы получаете errno 2 («нет такого файла или каталога»). Измените свой вызов на:
makeFork("/bin/ls")
… и он работает правильно.