TypeError:execv()arg 2必须只包含字符串

时间:2016-12-07 00:55:57

标签: python

所以,在python中,当我尝试执行以下代码时。

from subprocess import *
args = "A"*99

args = list(args)
args[ord('A')] = "\x00"
args[ord('B')] = "\x20\x0a\x0d"
proc= Popen(["./input2"]+args,stdin=PIPE,stderr=STDOUT)

我得到了

  

TypeError:execv()arg 2必须只包含字符串

所以我做了一些研究并意识到如果Popen()中有任何整数格式化的参数,它会给我错误。但我不知道哪个参数可能是整数。

仅供参考:如果我发表评论

args[ord('A')] = "\x00"
args[ord('B')] = "\x20\x0a\x0d"

此代码,根本不会出现错误。

  • 程序input2用c写入,它只是输入并比较值 - argv ['A'] - 如果为“\ x00”,如果为真,程序将打印出第1阶段清除。

2 个答案:

答案 0 :(得分:2)

这更适合作为评论,但我还没有足够的代表。我正在经历这一挑战并遇到了确切的问题。事实证明,您只需执行args[ord('A')] = ""即可避免此错误。

答案 1 :(得分:0)

Popen的参数可能不包含NUL字符\x00

例如,这有效:

Popen(["/bin/echo", "Hello"])

但这不是:

Popen(["/bin/echo", "Hello\x00"])