【问题标题】:Shell script called using Python subprocess call() takes no effect使用 Python 子进程 call() 调用的 Shell 脚本无效
【发布时间】:2014-02-26 13:23:50
【问题描述】:

我在使用 subprocess.call() 执行 shell 脚本时遇到问题,我在 Python 控制台中进行了这个测试,试图找出问题所在:

import subprocess
subprocess.call(["touch", "/tmp/out.txt"])

这工作并在 tmp 文件夹中创建文件。但是,这两个调用都不起作用:

subprocess.call(["sh", "/tmp/test.sh"])
subprocess.call(["/tmp/test.sh"])

/tmp/test.sh:

#!/bin/bash
touch out.txt
exit 0

基本上,从 subprocess.call() 执行脚本不会产生任何输出。我授予文件和文件夹的完全权限以避免任何问题。似乎问题可能与执行脚本的用户有关,但它与第一​​种情况下的用户相同,它正在工作。 知道可能是什么问题吗?

顺便说一句,我使用的是 Ubuntu 12.04 LTS,Python 2.7.4。

提前致谢。

【问题讨论】:

  • 这应该在你的 cwd 上创建一个 test.sh,而不是你的 /tmp
  • 不确定你的意思。我希望在 /tmp 文件夹中创建文件 out.txt。我在访问脚本文件时没有收到任何错误,因此路径是正确的,但是文件没有被创建。
  • "...从 subprocess.call() 执行脚本不会产生任何输出" - 你的 shell 脚本不包含任何应该产生任何输出的东西,所以我不确定为什么会这样令人惊讶...

标签: python linux ubuntu subprocess


【解决方案1】:

您的脚本已正确执行。问题在于您的 bash 脚本。

你必须明白这个脚本继承了父脚本的工作目录。因此out.txt 将在您运行使用subprocess.call 的python 脚本的目录中创建。

【讨论】:

  • 正确。正如 utdemir 指出的那样,文件 out.txt 是在我的 cwd 中创建的,这是我用户的主文件夹。
猜你喜欢
  • 2013-09-26
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2017-02-21
  • 2019-11-21
  • 2016-07-08
相关资源
最近更新 更多