bash printf "\x00\x00\xFF\x00" | dd bs=4 seek=$(($y*$width+$x)) of=/dev/fb0
の場合、はモニターのピクセル単位の幅で、x
、y
の座標に赤いピクセルを書き込むことができます。16進数のPythonサブプロセス
私は画像の色の値を取得するためにpythonを使用しています。以前のbashコマンドを呼び出して、pythonで見つかった値を入れたいと思います。
私はサブプロセスを呼び出す場合:
command = 'printf "\x00\x00\xFF\x00" | dd bs=4 seek=276200 of=/dev/fb'
subprocess.call(command, shell=True)
私はこのエラーを取得する:\x
文字サブプロセスの作品がなければ
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
。
command = 'printf "test" | dd bs=4 seek=2 of=test.txt'
subprocess.call(command, shell=True)
私はこの1つのようないくつかの興味深いリンクが見つかりました:Formatting a command in python subprocess popen を私は実際にそれを得ることはありません。サブプロセスに\x
文字を入れることは可能ですか?どうやって ?別の方法がありますか?
は非常に多くの
EDITありがとう:すべての
まずあなたの助けのすべてに感謝します。
私はトリックを行う何かを発見しました。私はこれが最良の方法だとは思わないが、それは機能する。
printf "\x00\x00\xFF\x00"
は正常に動作し、奇妙な文字�
を出力します。しかし、Pythonサブプロセスsubprocess.call('printf "\x00\x00\xFF\x00"', shell=True)
で呼び出されると、エラーTypeError: execv() arg 2 must contain only strings
が返されます。このようなバックスラッシュをエスケープすると、subprocess.call('printf "\\x00\\x00\\xFF\\x00"', shell=True)
がで、奇妙なものではなく�
となるので、端末からの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'文字列を作成します。 – martineau
なぜサブプロセスを使用していますか?ファイルを開いてPythonから直接書き込むことができます。 'with open("/dev/fb "、" wb ")をfb:fb.seek(276200)とします。 fb.write( '\ x00 \ x00 \ xff \ x00') ' – chepner
ありがとう、私は知らなかった、面白そうだ、私はこれをテストするつもりだ、' dd'オプション 'bs = 4'はどうだろうか? fb.seekで? – Lucien