草庐IT

subprocess_exec

全部标签

python - 如何抑制或捕获 subprocess.run() 的输出?

来自subprocess.run()上的文档中的示例似乎不应该有任何输出subprocess.run(["ls","-l"])#doesn'tcaptureoutput但是,当我在pythonshell中尝试它时,列表会被打印出来。我想知道这是否是默认行为以及如何抑制run()的输出。 最佳答案 这里是如何抑制输出,按清洁度递减的顺序。他们假设您使用的是Python3。您可以重定向到特殊的subprocess.DEVNULL目标。importsubprocesssubprocess.run(['ls','-l'],stdout=su

python - subprocess 和 Type Str 不支持缓冲区 API

我有cmd=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)forlineincmd.stdout:columns=line.split('')print(columns[3])第3行出现错误TypeStr不支持缓冲区API。我在Python3.3上做错了什么 最佳答案 您正在读取二进制数据,而不是str,因此您需要先对输出进行解码。如果将universal_newlines参数设置为True,则使用locale.getpreferredencoding()metho

python - 无法通过 exec() 语句更改函数中的全局变量?

为什么我不能使用exec()从函数内部更改全局变量?当赋值语句在exec()之外时它工作正常。这是我的问题的一个例子:>>>myvar='test'>>>defmyfunc():...globalmyvar...exec('myvar="changed!"')...print(myvar)...>>>myfunc()test>>>print(myvar)test 最佳答案 根据thedocs,exec语句采用两个可选表达式,默认为globals()和locals(),并始终在locals()一。所以,只是更明确/具体/精确...:>

python - 如果stdout = PIPE,我如何找出为什么subprocess.Popen wait() 永远等待?

我有一个写入标准输出和可能标准错误的程序。我想从python运行它,捕获标准输出和标准错误。我的代码如下:fromsubprocessimport*p=Popen(exe,shell=TRUE,stdout=PIPE,stderr=PIPE)rtrncode=p.wait()对于几个程序,这可以正常工作,但是当我添加一个新程序时,新程序会永远挂起。如果我删除stdout=PIPE,程序会将其输出写入控制台并完成,一切都很好。如何确定导致挂起的原因?在WindowsXP上使用python2.5。该程序不会从标准输入读取数据,也没有任何类型的用户输入(即“按下键”)。

python - 在 subprocess.check_output() 中抑制 stderr

我正在尝试寻找一种方法来忽略标准错误流(类似于2>/dev/null):output=subprocess.check_output("netstat-nptl".split())我应该在上面的命令中添加什么来实现这一点? 最佳答案 只需告诉subprocess为您重定向它:importsubprocessoutput=subprocess.check_output("netstat-nptl".split(),stderr=subprocess.DEVNULL)对于python2,它有点冗长。importosimportsubpr

python - 错误 : NameError: name 'subprocess' is not defined

这个问题不太可能帮助任何future的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。#!/usr/bin/python3username='joe'#generatepassphrasepw_length=6phrase=subprocess.check_output(['pwgen',str(pw_length),'1'])phrase=phrase.decode('utf-8').strip()dev_null=open('/dev/null

python - subprocess.call 使用字符串与使用列表

我正在尝试将rsync与subprocess.call一起使用。奇怪的是,如果我传递subprocess.call一个字符串,它就可以工作,但它不适用于列表(ala,Python'sdoc)。用字符串调用sp.call:In[23]:sp.call("rsync-avcontent/writings_raw/",shell=True)sendingincrementalfilelistsent6236bytesreceived22bytes12516.00bytes/sectotalsizeis324710speedupis51.89Out[23]:0用列表调用sp.call:In[2

Python:在 subprocess.Popen(..) 中导出环境变量

我在调用subprocess.Popen时设置环境变量时遇到问题。环境变量似乎没有被设置。有关如何为Python命令行调用正确设置环境变量的任何建议?我的目标是运行一个使用由我的Python代码确定的环境变量的脚本:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)subprocess.Popen('/usr/bin/mybinary',env=d).wait()但脚本的react就像从未设置过变量一样这是我尝试使用Python的交互式解释器进行的测试:d=dict(os.environ)d["TEST_VARIABLE"]=str(1234)

Python Subprocess.Popen 从一个线程

我正在尝试使用子进程模块和Popen在线程内启动“rsync”。在我调用rsync之后,我还需要读取输出。我正在使用通信方法来读取输出。当我不使用线程时,代码运行良好。看来,当我使用线程时,它会卡在通信调用上。我注意到的另一件事是,当我设置shell=False时,我在线程中运行时不会从通信中得到任何返回。 最佳答案 您没有提供任何代码供我们查看,但这里有一个与您描述的类似的示例:importthreadingimportsubprocessclassMyClass(threading.Thread):def__init__(sel

python - 我应该在我的 PyQt 应用程序中使用 `app.exec()` 还是 `app.exec_()`?

我使用Python3和PyQt5。这是我的测试PyQt5程序,关注最后两行:fromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*importsysclasswindow(QWidget):def__init__(self,parent=None):super().__init__(parent)self.setWindowTitle('test')self.resize(250,200)app=QApplication(sys.argv)w=window()w.show()sys.exit(app.exec())#sys.exit(app.