我有一个调用另一个shell脚本的Python脚本 -
arg1 = "-a"
arg2 = "-b"
arg3 = "Some String"
argList = ["script.sh", arg1, arg2, arg3]
subprocess.call(argList)
当我运行脚本时,arg3
被分割为"Some"
和"String"
,并作为两个单独的参数传递。
如何克服这个问题,将"Some String"
作为一个参数传递?
编辑:已解决
我通过将参数传递为$ 1,$ 2,$ 3等来调用被调用脚本内部的另一个函数。当我应该引用可能有$ 1,$ 2,$ 3等空格的参数时..抱歉,我们很抱歉。
答案 0 :(得分:1)
这应该有效:
import subprocess
arg1 = "-a"
arg2 = "-b"
arg3 = "Some String"
argList = ["sh", "script.sh", arg1, arg2, arg3]
subprocess.call(argList)
和script.sh
printf '%s\n' "$@"
确保引用"$@"
以避免在shell脚本中进行单词拆分。
这将输出:
-a
-b
Some String
答案 1 :(得分:0)
转义双引号,
arg3 = "\"Some String\""
答案 2 :(得分:0)
试试这个:
import shlex, subprocess
args=shlex.split('script.sh -a -b "Some String"')
subprocess.Popen(args)
答案 3 :(得分:0)
这是一个扩展的评论,而不是一个答案。
您的代码在我的Debian 9.3中运行良好
$ cat sc.sh
#!/bin/sh
# Above line is mandatory - otherwise python returns error of unkonwn format
echo "arg1=$1"
echo "arg2=$2"
echo "arg3=$3"
echo "arg4=$4"
$ chmod +x sc.sh
$ pwd
/home/gv
$ cat test.py
import subprocess
arg1 = "-a"
arg2 = "-b"
arg3 = "some string"
arglist = ["/home/gv/sc.sh", arg1, arg2, arg3]
subprocess.call(arglist)
$ python test.py
arg1=-a
arg2=-b
arg3=some string
arg4=
PS:在我的系统中安装了python 2.17.14和bash 4.4.12