TypeError: execv() arg 2 must contain only strings

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I am getting the following error when running the script below,can anyhelp to identify what the problem is and how to overcome it

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() 

ERROR:-

545804

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 

回答1:

The third element in ssh_command is an integer. It needs to be a string.

e.g:

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

And the solution is simple, just add some quotes:

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


回答2:

First you need to add the quotes around 29418 as mgilson mentioned. Second let's break down what you're trying to run:

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

That equals

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) 

One thing that pops out at me is that you may want to say --format=JSON in which case your elements in the ssh_command array should be combined as [..., "--format=JSON", ...]. The other thing you may want to do is print result after your result= line to help with the debugging.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!