【问题标题】:Pass parameter to bash script from Python3从 Python3 将参数传递给 bash 脚本
【发布时间】: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


【解决方案1】:

您可以使用原始字符串作为数据包:

packet=r"\\0x57\\0x33\\0x36\\0x30\\0x30\\0x0a\\0x33\\0x36\\0x30\\0x30\\0x0a\\0xf9\\0x20"

这样它就不会处理任何转义字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2012-12-29
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多