【问题标题】:Execute a linux command inside a python program在 python 程序中执行 linux 命令
【发布时间】:2013-03-27 14:25:43
【问题描述】:

我正在 linux 中编写一个 python 程序。

在我的 python 程序中,我需要从 python 程序本身内部执行另一个工作目录中的 linux 命令。

示例: 我的程序 test.py 在目录 dir1/dir2 中。

./wlst.sh是dir1/dir2/dir3/dir4中的一个程序。

所以我需要从 dir2 中的 python 程序执行 dir4 中的 .wlst.sh。

如何做到这一点?

【问题讨论】:

  • 我假设您已经用谷歌搜索并找到了 subprocess 模块。你有什么问题?

标签: python subprocess


【解决方案1】:
import subprocess
try:
  output = subprocess.check_output(
    [ './wlst.sh' ],
    cwd='dir1/dir2/dir3/dir4',
    stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as problem:
  print "Error", problem.returncode
  print "  while calling subprocess, output was:", problem.output
else:
  print "No error while calling subprocess, output was:", output

我不得不提一下,这会捕获子进程的所有输出,所以如果这个子进程做了很多很多(并且可能永远不会终止),这将填满你的 RAM。在这种情况下考虑使用check_call() 而不是check_output(),可能会将输出重定向到/dev/null

【讨论】:

    【解决方案2】:
    import subprocess
    subprocess.call(['./wlst.sh'], cwd='dir1/dir2/dir3/dir4')
    

    【讨论】:

    • 使用chdir会有明显的副作用;对于call(),最好使用可选参数cwd=
    【解决方案3】:
        import os ,subprocess
        os.chdir("dir3/dir4")
        os.system("./wlst.sh")
    

    否则你可以使用子进程

        os.chdir("dir3/dir4")
        subprocess.call("./wlst.sh")
    

    【讨论】:

    • 使用chdir会有明显的副作用。
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 2011-07-06
    • 2022-10-19
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多