日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 可执行文件_如何通过Python函数运行的可执行文件的终端...

發布時間:2023/12/1 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 可执行文件_如何通过Python函数运行的可执行文件的终端... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想抑制運行可執行文件的函數產生的所有終端輸出.

我試圖通過使用每次調用函數時臨時重新定義stdout和stderr的上下文管理器來抑制Python函數的輸出.這會抑制函數中的print調用產生的終端輸出,但是當函數調用產生終端輸出的可執行文件時,它似乎不起作用.

那么,如何抑制Python函數調用的可執行文件的輸出?

我的代碼如下.我已經包含了一個示例函數,它調用ls來試圖說明我想要抑制的終端輸出的類型(雖然我正在處理的函數是不同的).

#!/usr/bin/env python

import os

import subprocess

import sys

def main():

print("hello")

with silence():

print("there")

print("world")

with silence():

engage_command(command = "ls")

class silence(object):

def __init__(

self,

stdout = None,

stderr = None

):

if stdout == None and stderr == None:

devnull = open(os.devnull, "w")

stdout = devnull

stderr = devnull

self._stdout = stdout or sys.stdout

self._stderr = stderr or sys.stderr

def __enter__(

self

):

self.old_stdout = sys.stdout

self.old_stderr = sys.stderr

self.old_stdout.flush()

self.old_stderr.flush()

sys.stdout = self._stdout

sys.stderr = self._stderr

def __exit__(

self,

exc_type,

exc_value,

traceback

):

self._stdout.flush()

self._stderr.flush()

sys.stdout = self.old_stdout

sys.stderr = self.old_stderr

def engage_command(

command = None

):

process = subprocess.Popen(

[command],

shell = True,

executable = "/bin/bash")

process.wait()

output, errors = process.communicate()

return output

if __name__ == "__main__":

main()

在我的特定情況下,我正在嘗試運行以下函數(而不是上面的ls函數):

with propyte.silence():

stream = pyaudio.PyAudio().open(

format = pyaudio.PyAudio().get_format_from_width(1),

channels = 1,

rate = bitrate,

output = True

)

運行時,會產生如下輸出:

ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) unable to open slave

ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave

ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear

ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe

ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side

ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave

Cannot connect to server socket err = No such file or directory

Cannot connect to server request channel

jack server is not running or cannot be started

JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for 4294967295, skipping unlock

JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for 4294967295, skipping unlock

我想壓制那個輸出.

編輯:測試@Matthias提供的a solution

#!/usr/bin/env python

import contextlib

import os

import subprocess

import sys

def main():

print("hello")

with silence():

print("there")

print("world")

with silence():

engage_command(command = "ls")

@contextlib.contextmanager

def silence():

devnull = os.open(os.devnull, os.O_WRONLY)

old_stderr = os.dup(2)

sys.stderr.flush()

os.dup2(devnull, 2)

os.close(devnull)

try:

yield

finally:

os.dup2(old_stderr, 2)

os.close(old_stderr)

def engage_command(

command = None

):

process = subprocess.Popen(

[command],

shell = True,

executable = "/bin/bash")

process.wait()

output, errors = process.communicate()

return output

if __name__ == "__main__":

main()

我沒有成功地抑制打印或ls的終端輸出,我不知道為什么.

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python 可执行文件_如何通过Python函数运行的可执行文件的终端...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。