При попытке выполнить следующий код, я получаюPython многопроцессорной с подпроцесс Флаги не запуститься
OSError: [Errno 2] No such file or directory
Странная проблема в том, что, когда я пытаюсь запустить LS без каких-либо других флагов, таких как -a, подпроцесс перспективе как предполагалось, без ошибок. Я также попытался добавить shell = True вместе с флагом -a, но все равно не повезло.
from multiprocessing import *
import subprocess
class ThreadManager:
def __init__(self, tools):
self.tools = tools
self.pool_size = cpu_count()
self.p1 = Pool(processes=self.pool_size, maxtasksperchild=2,)
def initiate(self):
for self.tool in self.tools:
print self.tool
self.p1 = Pool(4)
self.p1 = Process(target=subprocess.call, args=(self.tool,))
print self.p1
self.p1.start()
th = ThreadManager("ls -a".split("/"))
th.initiate()
'subprocess.call' должен быть вызван с помощью' оболочки = true' работать с ' "LS -a"' или иметь список аргументов, передаваемых как '["/bin/ls "," -a "]'. Почему вы используете 'split ("/")' – myaut
Я использую 'split ("/")', потому что результат, который я получаю при его запуске, равен 'l s - a' Он разбивает целые строковые символы. Кажется, я не могу заставить shell = True работать. Другими словами, выполняется это 'Процесс (target = subprocess.call, args = (self.tool, shell = True))' Результаты в ** Невозможно назначить функцию для вызова ** –
Поскольку 'shell = True' является аргумент _keyword_ (_kwarg_), в то время как 'args' принимает кортеж _postional arguments_. Вы должны попытаться использовать 'kwargs = dict (shell = True)' для передачи его в 'Process' или просто использовать' .split() ', который превращает' 'ls -a''' в' ["ls", "-a "]' – myaut