2013-12-17 2 views
8

Я получаю следующее сообщение об ошибке при запуске скрипта ниже, может anyhelp определить, что проблема и как ее преодолетьTypeError: execv() аргумент 2 должен содержать только строки

import subprocess 
import sys 
import os 

def main(): 
    to = '' 
    ssh_command = ["ssh", "-p", "29418", "review-android.quicinc.com", "gerrit", 
        "query", "--format=JSON", "--current-patch-set", 
        "--commit-message", "--files", ] 

    with open('gerrit_output.txt', 'a') as fp: 
     with open('caf_gerrits.txt','r') as f : 
      for gerrit in f : 
       print gerrit 
       result = subprocess.check_output(ssh_command + [gerrit, ]) 
       print result 
       fp.write(result) 

if __name__ == '__main__': 
main() 

ОШИБКА: -

Traceback (most recent call last): 
    File "test.py", line 20, in <module> 

    File "test.py", line 15, in main 

    File "/usr/lib/python2.7/subprocess.py", line 537, in check_output 
    process = Popen(stdout=PIPE, *popenargs, **kwargs) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
TypeError: execv() arg 2 must contain only strings 

ответ

16

Третий элемент ssh_command представляет собой целое число. Это должна быть строка.

например:

ssh_command = ["ssh", "-p", 29418, ... 
#       ^problem 

А решение очень простое, просто добавьте несколько цитат:

ssh_command = ["ssh", "-p", "29418", ... 
#       ^Now it's a string. 
+0

спасибо за информацию .. как ее исправить? – user2955256

+1

, что не исправить проблему .. – user2955256

+1

@ user2955256 - Same Error? Если есть одна и та же ошибка, вы должны точно указать, что нам нужно * воспроизвести * проблему. например опубликуйте точное содержание 'gerrit'. Если мы не сможем воспроизвести вашу проблему, тогда мы действительно просто догадываемся о том, что происходит не так. – mgilson

1

Сначала нужно добавить кавычки 29418 как упомянуто mgilson. Во-вторых, давайте сломать то, что вы пытаетесь запустить:

ssh_command = ["ssh", "-p", 29418, "review-android.company.com", "gerrit", 
       "query", "--format", "JSON", "--current-patch-set", 
       "--commit-message", "--files", ] 

Это равняется

ssh -p 29418 review-android.company.com gerrit query --format JSON --current-patch-set --commit-message --files 
(then I'm assuming you have filenames in your caf_gerrits.txt file which get appended at the end) 

Одна вещь, которая выскакивает у меня есть, что вы можете сказать в --format=JSON этом случае ваши элементы в ssh_command массив должен быть объединен как [..., "--format=JSON", ...]. Другая вещь, которую вы, возможно, захотите сделать, - print result после вашей линии result=, чтобы помочь с отладкой.

+0

Я обновил последний код и ошибку – user2955256

+0

Какую именно команду ssh вы пытаетесь выполнить? – misakm

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