Использование forks и os.execl в Python дает мне OSError - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть большая программа (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 Ответ

1 голос
/ 01 апреля 2019

bin/ls - это не /bin/ls: имя без начального / относится к вашему текущему рабочему каталогу, поэтому для вашего текущего каталога требуется подкаталог с именем bin, содержащийИсполняемый файл ls.

Поскольку такого каталога не существует, вы получите сообщение об ошибке 2 («такого файла или каталога нет»).Измените ваш вызов на:

makeFork("/bin/ls")

... и он будет работать правильно.

...