将/all/args从python传递到bash脚本

将/all/args从python传递到bash脚本,python,bash,parameter-passing,command-line-arguments,Python,Bash,Parameter Passing,Command Line Arguments,这是针对KODI的,我需要从python运行systemd来运行bash脚本,否则会出现黑屏。前端没有打开 到目前为止,如果有一个或多个参数,我可以将一个参数传递给bash脚本,如果没有参数,则可以不传递任何参数。后者是我需要帮助的部分 #!/usr/bin/python import subprocess, sys if len(sys.argv) > 1: arg=str(sys.argv[1]) print ("arg is %s" % arg)

这是针对KODI的,我需要从python运行systemd来运行bash脚本,否则会出现黑屏。前端没有打开

到目前为止,如果有一个或多个参数,我可以将一个参数传递给bash脚本,如果没有参数,则可以不传递任何参数。后者是我需要帮助的部分

#!/usr/bin/python
import subprocess, sys


if len(sys.argv) > 1:
        arg=str(sys.argv[1])
        print ("arg is %s" % arg)
        subprocess.call(["systemd-run /usr/bin/emulator-frontend.sh %s" % str(sys.argv[1])], shell=True)
else:

        subprocess.call(["systemd-run /usr/bin/emulator-frontend.sh"], shell=True)

当我使用一个脚本调用另一个脚本时,我会尽可能优雅,如果没有if语句,我会喜欢它。

一般来说,你不能将列表参数与
shell=True
结合使用。使用其中一个

subprocess.call("systemd-run /usr/bin/emulator-frontend.sh", shell=True)

如果要将Python脚本的参数直接传递给子流程,只需连接以下列表:

subprocess.call(["systemd-run", "/usr/bin/emulator-frontend.sh"] + sys.argv[1:])

请注意,如果没有参数,
sys.argv[1://code>为空,硬编码参数列表保持不变,不需要明确的条件。

在结尾处使用最佳实践答案可能是有意义的。当我没有使用括号和shell=true时,它会导致我没有可用于诊断的视图输出的问题。结果是黑屏和重启。
subprocess.call(["systemd-run", "/usr/bin/emulator-frontend.sh"] + sys.argv[1:])