我想从Python调用一个外部程序。我已经用过Popen()
并且call()
做到了。
两者有什么区别?
我的特定目标是从Python运行以下命令。我不确定重定向如何工作。
./my_script.sh > output
我阅读了文档,并说它call()
是便利功能或快捷功能。我们使用call()
代替会失去任何功能Popen()
吗?
有两种方法可以进行重定向。两者都适用于subprocess.Popen
或subprocess.call
。
设置关键字参数shell = True
或executable = /path/to/the/shell
并在那里指定命令。
由于您只是将输出重定向到文件,因此请设置关键字参数
stdout = an_open_writeable_file_object
对象指向output
文件的位置。
subprocess.Popen
比subprocess.call
。
Popen
不会阻塞,允许您在进程运行时与它进行交互,或者在Python程序中继续进行其他操作。调用Popen
返回一个Popen
对象。
call
确实会
阻止。它支持与Popen
构造函数相同的所有参数,因此您仍可以设置进程的输出,环境变量等,脚本将等待程序完成,并call
返回表示进程退出状态的代码。
returncode = call(*args, **kwargs)
与通话基本相同
returncode = Popen(*args, **kwargs).wait()
call
只是一种便利功能。它在CPython的实现是在subprocess.py:
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
如您所见,它周围是薄薄的包装纸Popen
。
问题内容: 我的工作应该使用并行技术,并且我是python的新用户。因此,我想知道您是否可以共享有关python和模块的一些资料。两者有什么区别? 问题答案: 该模块使您可以运行和控制其他程序。您可以使用计算机上的命令行启动的任何内容,都可以使用此模块运行和控制。使用它可以将外部程序集成到您的Python代码中。 该模块可让您将以python编写的任务划分为多个进程,以帮助提高性能。它提供与该模块
问题内容: 考虑: 我尝试通过以下方式调用此过程: 但这只会产生 但是,如果我将其更改为 一切正常。尽管文档指出这是正确的语法,但这仍然可行。 为什么什么时候不工作? 问题答案: 如您的文档所述,Yup ..是可从ODBC驱动程序使用的构造/语法。 还有的T-SQL文档中没有提及,只。 它不起作用,因为它不是T-SQL。
我正在学习,但我对这段代码有点困惑: 输出: 如您所见,输出是格式化的。但是我不知道为什么结尾有字符和。 如果我在终端中运行此命令,则没有这些字符。 正常输出: 我怎样才能移除它们?
这里也有类似的问题,但它们与特定的编程语言有关,我正在寻找概念层面的答案。 据我所知,functor本质上是不可变的容器,它公开了派生另一个functor的map()API。哪种加法可以将特定的函子称为单子? 据我所知,每个仿函数都是仿函数,但不是每个仿函数都是单子。
问题内容: 使用和调用函数有什么区别? 与 前述两种方法之间是否存在性能差异?什么时候最好使用over ,反之亦然? 问题答案: 不同之处在于,您可以使用数组作为函数来调用函数。需要明确列出参数。有用的助记是 “ 甲用于 一个rray和ç为 ÇOMMA”。 有关apply和call的信息,请参见MDN的文档。 伪语法: 从ES6开始,数组也可以与该函数一起使用,您可以在此处查看兼容性。 样例代码:
问题内容: 在Swift 2.0中 ,Apple引入了一种处理错误的新方法(do- try-catch)。几天前,在Beta 6中,甚至引入了一个更新的关键字()。另外,知道我可以使用。这3个关键字之间有什么区别,何时使用每个关键字? 问题答案: 已为Swift 5.1更新 假定以下抛出函数: 当您尝试调用可能抛出的函数时,有2个选项。 您可以通过将呼叫围绕在do-catch块中来承担 处理错误