TypeError:必须是不带空字节的字符串,而不是os.system()中的str

我正在尝试编写一个使用下面的代码执行C可执行文件的python代码

os.system("./a.out "%s"" % payload)

其中./a.out是一个C可执行文件,有效载荷是作为命令行参数给出的一个字符串(不含空格)。 (链接是这个,我正在试着按照章节链接函数的例子)
现在我写了另一个C代码,但它需要3个命令行参数。 所以我的字符串应该是arg [1] +“”+ arg [2] +“”+ payloadString。 (c代码将arg [1]和arg [2]转换为整数以在其函数中使用它)。 这是我的Python代码的片段:

p = "10 "  #arg[1]
p += "10 " #arg[2]
p += "string without spaces which I need as payload" #arg[3]
os.system("./a.out "%s"" % p)


其中./a.out是我的C代码的可执行文件,它需要3个命令行参数。 当我运行Python代码时,出现错误:

Traceback (most recent call last):
File "this_file.py", line XX, in <module>
os.system("./a.out "%s"" % p)
TypeError: must be string without null bytes, not str


谁能帮我?
PS我是python的新手。 类似的问题出现在堆栈溢出中,但我不确定如何使用他们的答案来解决我的问题。


把一个r放在os.system调用中。

os.system(r"./a.out "%s"" % p)

你为什么不使用呼叫来达到这个目的。 我想它会做的工作你可以在列表中提供参数例如:

from subprocess import call
call(["./a.out","10","10","string without spaces which I need as payload"])

在这里你的情况相当于

call(["./a.out",arg[0],arg[1],arg[2]])

我认为这应该工作

链接地址: http://www.djcxy.com/p/87213.html

上一篇: TypeError: must be string without null bytes, not str in os.system()

下一篇: What is the best way to convert byte array to string?