2013-11-20 5 views
2

Я использую Python 2.7питон подпроцесс дать TypeError

cmd = "sudo start service/newservice db=temp" 
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT) 

Над командой работает отлично и intented процесс породил.

cmd = "sudo stop service/newservice db=temp" 
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT) 

В том же файле, если указано выше. Это дает ошибку.

traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
     File "/usr/lib/python2.7/subprocess.py", line 672, in __init__ 
     errread, errwrite) 
     File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child 
     raise child_exception 
    TypeError: must be encoded string without NULL bytes, not str 
+0

Возможно, вы можете попробовать остановить первый процесс с python, вместо запуска другого процесса, чтобы убить первого. см. эту ссылку для получения дополнительной информации: http://stackoverflow.com/questions/4084322/killing-a-process-created-with-pythons-subprocess-popen – symbiotech

+0

может быть каким-то странным символом, вставленным туда, см. это: http: // stackoverflow.com/questions/15203106/wxpython-how-do-we-remove-null-byte-from-string-when-using-textcontrol-getvalue – symbiotech

+1

Как выглядит 'cmd' с помощью' print (repr (cmd)) '? – glglgl

ответ

1

Я решил его решить. Я только конвертированы CMD к Силе перед передачей его shlex.split, это хорошо особенно, когда вы получаете некоторый входной сигнал таким образом:

cmd = "sudo stop service/newservice db=" + db 

Безопаснее практика, чтобы преобразовать его в строку в любом случае.

+1

Пожалуйста, используйте спецификатор формата в том, что ... например. cmd = "sudo stop service/newservice db =% s"% str (db) – Nilesh

Смежные вопросы