Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
十六进制到python子进程_Python_Bash_Hex_Subprocess_Dd - Fatal编程技术网

十六进制到python子进程

十六进制到python子进程,python,bash,hex,subprocess,dd,Python,Bash,Hex,Subprocess,Dd,在bashprintf“\x00\x00\xFF\x00”| dd bs=4 seek=$($y*$width+$x))of=/dev/fb0,其中width是监视器的像素宽度,允许您在屏幕上的x,y坐标处写入一个红色像素 我正在使用python检索图像的颜色值,我想调用前面的bash命令,并将用python找到的值放入其中 使用以下命令调用子流程时: command = 'printf "\x00\x00\xFF\x00" | dd bs=4 seek=276200 of=/dev/fb' s

在bash
printf“\x00\x00\xFF\x00”| dd bs=4 seek=$($y*$width+$x))of=/dev/fb0
,其中
width
是监视器的像素宽度,允许您在屏幕上的
x
y
坐标处写入一个红色像素

我正在使用python检索图像的颜色值,我想调用前面的bash命令,并将用python找到的值放入其中

使用以下命令调用子流程时:

command = 'printf "\x00\x00\xFF\x00" | dd bs=4 seek=276200 of=/dev/fb'
subprocess.call(command, shell=True)
我得到这个错误:

Traceback (most recent call last):
File "./sub.py", line 30, in <module>
subprocess.call(command, shell=True)
File "/usr/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings
我发现了一些有趣的链接,比如: 但我真的不明白。是否可以将
\x
字符放入子流程?怎样?还有别的办法吗

多谢各位

编辑:

首先感谢大家的帮助

我发现了一些能起作用的东西。我不认为这是最好的方法,但它是有效的

终端中的
printf“\x00\x00\xFF\x00”
工作正常,打印一个奇怪的字符
。但是当在python子进程中调用subprocess.call('printf“\x00\x00\xFF\x00”,shell=True)
时,它会给出一个错误
TypeError:execv()arg 2必须只包含字符串
。当您像这样转义反斜杠
subprocess.call('printf“\\x00\\x00\\xFF\\x00”,shell=True)
时,它打印
\x00\x00\xFF\x00
,而不是奇怪的
因此这与直接从终端获取的printf不完全相同。我试图用很多不同的方法逃跑,但我没有得到
。我不知道确切的原因

所以我制作了一个小的
printf.bash
文件,如下所示:

#!/bin/bash
printf $1
我这样调用子流程:

subprocess.call('./printf.bash "\\x00\\x00\\xFF\\x00"', shell=True)
我得到了
我想要。奇怪的是,这与:

subprocess.call('printf "\\x00\\x00\\xFF\\x00"', shell=True)

谢谢

试着避开反斜杠

command = 'printf "\\x00\\x00\\xFF\\x00" | dd bs=4 seek=276200 of=/dev/fb'
编辑:在我的bash中,我需要更改您的printf以使角色实际出现:

printf "\x000\x000\x0FF\x000"

上述方法可能有效,如果不行,我会尝试添加一个额外的前导数字和/或转义反斜杠。编辑:或查看下面的注释,建议使用python的原始字符串标志。请参阅:

尝试转义反斜杠

command = 'printf "\\x00\\x00\\xFF\\x00" | dd bs=4 seek=276200 of=/dev/fb'
编辑:在我的bash中,我需要更改您的printf以使角色实际出现:

printf "\x000\x000\x0FF\x000"

上述方法可能有效,如果不行,我会尝试添加一个额外的前导数字和/或转义反斜杠。编辑:或查看下面的注释,建议使用python的原始字符串标志。请参阅:

是否有方法将包含二进制数据的字符串作为命令行参数传递给shell?如果有,请创建一个使用它的
命令
字符串。为什么要使用
子流程
?可以直接从Python打开文件并写入<代码>打开(“/dev/fb”,“wb”)作为fb:fb.seek(276200);fb.write('\x00\x00\xff\x00')
谢谢你,我不知道,看起来很有趣,我要测试一下,fb.seek的
dd
选项
bs=4
怎么样?
fb.seek(276200*4)
谢谢你的工作。。。我很笨:-)有没有办法将包含二进制数据的字符串作为命令行参数传递给shell?如果有,请创建一个使用它的
命令
字符串。为什么要使用
子流程
?可以直接从Python打开文件并写入<代码>打开(“/dev/fb”,“wb”)作为fb:fb.seek(276200);fb.write('\x00\x00\xff\x00')
谢谢你,我不知道,看起来很有趣,我要测试一下,fb.seek的
dd
选项
bs=4
怎么样?
fb.seek(276200*4)
谢谢你的工作。。。我很笨:-)是的。或者,也可以选择
command=r'printf“\x00\x00\xFF\x00”| dd bs=4 seek=276200 of=deleteme'
。是。或者,也可以选择
command=r'printf“\x00\x00\xFF\x00”| dd bs=4 seek=276200 of=deleteme'