python - 从 Python 向 shell 脚本传递参数

标签 python linux shell

我正在编写一个将参数传递给 shell 脚本的 python 程序。

这是我的 python 代码:

import subprocess

Process=subprocess.Popen('./copyImage.sh %s' %s str(myPic.jpg))

还有我的“copyImage.sh”:

#!/bin/sh

cp /home/pi/project/$1 /home/pi/project/newImage.jpg

我可以毫无问题地在终端上运行脚本。但是执行python代码时,终端返回"NameError: name 'myPic' is not defined"

如果我将语法更改为

Process=subprocess.Popen('./copyImage.sh %s' %s "myPic.jpg")

然后终端返回"OSError: [Errno 2] No such file or directory"

我关注了这个:Python: executing shell script with arguments(variable), but argument is not read in shell script但它没有帮助。

最佳答案

subprocess 模块需要参数列表,而不是空格分隔的字符串。你尝试的方式导致 python 寻找一个名为 "copyImage.sh myPic.jpg" 的程序并在没有参数的情况下调用它,而你想寻找一个名为 copyImage.sh 并用一个参数调用它。

subprocess.check_call(['copyImage.sh', 'myPic.jpg'])

我还想提一下,由于您的脚本只是在 shell 中调用复制,您可能应该去掉中间人并只使用 python 的 shutil.copy直接地。它是比为此任务运行子流程更合适的工具。

关于python - 从 Python 向 shell 脚本传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34279080/

相关文章:

Python daysBetweenDate

python - 如何在 scikit-learn 中获取 LDA 的组件?

python - 从列表中删除字典的重复项

linux - 如何在 Linux 上记录内存消耗?

docker - 在 Docker 中创建 Kafka 主题可以通过命令行进行,但不能通过 Shell 脚本文件进行

python - Laravel symfony 进程超过 60 秒超时

python-3.x - 如何检索桌面快捷方式指向的 url?

linux - 如何将命令执行器覆盖到 ~/bin my own 下的新版本 Git 而不是旧的/usr/bin/git

shell - BASH : Find number in text -> variable

linux - Bash:如何远程运行脚本