【发布时间】:2019-03-12 15:21:14
【问题描述】:
我有一个 bash 脚本 calibrate.sh:
#!/bin/sh
rotctl -vvvvv --send-cmd-term=-1 -m 903 -r /dev/ttyUSB0 -s 115200 w \\0x57\\0x33\\0x36\\0x30\\0x30\\0x0a\\0x33\\0x36\\0x30\\0x30\\0x0a\\0xf9\\0x20
我想在 Python 中调用它,参数类型为:
\\0x57\\0x33\\0x36\\0x30\\0x30\\0x0a\\0x33\\0x36\\0x30\\0x30\\0x0a\\0xf9\\0x20
我试过这样,但没有成功..我认为反斜杠或十六进制的问题..
packet="\x57\x33\x36\x30\x30\x01\x33\x36\x30\x30\x01\xf9\x20"
bash_cmd="./calibrate.sh " + packet
res=subprocess.Popen(bash_cmd, shell=True, executable='/bin/bash')
并相应地更改了 calibrate.sh:
rotctl -vvvvv --send-cmd-term=-1 -m 903 -r /dev/ttyUSB0 -s 115200 w $1
【问题讨论】:
-
我根本不会让 shell 参与其中;
Popen("./calibrate.sh", packet, executable='/bin/bash')。calibrate.sh是否被写入以正确处理它收到的参数是另一回事。请记住,如果数据包可以包含空字节,那么您需要大量重写calibrate.sh,因为外壳参数只是不能包含空字节。
标签: python-3.x bash