使用Subprocess或os.system在python中运行shell命令

时间:2015-04-17 20:51:36

标签: python shell

我需要使用我的朋友在shell中开发的函数在Python中编写代码。那可能吗?我可以做点什么吗

output = subprocess.call(' friends_developed_function',shell = True)

2 个答案:

答案 0 :(得分:1)

您需要先确定您朋友的功能,然后才能调用它。您不能调用在父进程中定义的函数[注1]。所以你可以执行以下操作:

output = subprocess.check_output(
  'source /path/to/function/definition; the_function args if needed',
  shell = True)

请注意,我将subprocess.call更改为subprocess.check_output,以便调用将返回shell函数的输出,而不是退出代码。

使用函数定义修复脚本文件的路径有点尴尬。您可以使用字符串文字:

直接在调用函数之前定义函数
output = subprocess.check_output(
  """my_func() { echo The argument is "$1"; }
     my_func the_argument
  """,
  shell = True)

注意:

  1. 除非您使用的是bash,否则可能无法为os.systemsubprocess.call(..., shell=True)工作,因为这些将使用基本shell /bin/sh,这通常是没有打击。即使你强制使用bash,并且你已经正确地导出了函数定义,它仍然是一个坏主意,因为你的python脚本只有在环境设置正确的情况下才能工作。

答案 1 :(得分:0)

有几种方法可以做到这一点,我发布了我熟悉的内容。

with open(r"*file location", 'wb', 0) as file:
    subprocess.check_call(*command*, stdout=file)

现在输出位于文本文件位置。我使用check_call来验证命令,所以我假设subprocess.call()只执行命令。