Вызов подпроцесса не удалось проанализировать аргумент (функция kill) Python [duplicate]

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

См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.

43
задан Cemre 3 April 2012 в 16:58
поделиться

2 ответа

Вам нужно предоставить shell=True для выполнения команды через интерпретатор оболочки. Если вы это сделаете, вы больше не сможете предоставлять список в качестве первого аргумента, потому что тогда будут переданы аргументы. Вместо этого укажите необработанную командную строку, которую вы хотите передать в оболочку:

 proc = subprocess.Popen('ls *.bc', shell=True,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE)
52
ответ дан Niklas B. 26 August 2018 в 05:12
поделиться

Расширение * glob является частью оболочки, но по умолчанию subprocess выполняет not отправку ваших команд через оболочку, поэтому выполняется команда (первый аргумент, ls) , тогда в качестве аргумента используется литерал *.

Это хорошо, см. блок предупреждения в разделе «Часто используемые аргументы» , подпроцессов docs , Он главным образом обсуждает последствия для безопасности, но также помогает избежать ошибок глупого программирования (так как нет никаких волшебных символов оболочки, о которых нужно беспокоиться)

Моя основная жалоба с shell=True заключается в том, что обычно это лучший способ перейдите к проблеме - в вашем примере вы должны использовать модуль glob :

import glob
files = glob.glob("*.bc")
print files # ['file1.bc', 'file2.bc']

Это будет быстрее (без накладных расходов на запуск), более надежным и перекрестным платформа (не зависит от платформы, имеющей команду ls)

40
ответ дан Christian Long 26 August 2018 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: