首页 > 解决方案 > 将 /all/ 参数从 python 传递到 bash 脚本

问题描述

这是针对 KODI 的,我需要从 python 使用 systemd-run 运行 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 语句的情况下发生,我喜欢它。

标签: pythonbashparameter-passingcommand-line-arguments

解决方案


通常,您不会将列表参数与shell=True. 使用任一

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

或者

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

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

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

请注意,如果没有参数,sys.argv[1:]则为空,并且硬编码参数列表保持不变,不需要显式条件。


推荐阅读