相关疑难解决方法(0)

在进程运行时不断打印Subprocess输出

要从我的Python脚本启动程序,我使用以下方法:

def execute(command):
    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = process.communicate()[0]
    exitCode = process.returncode

    if (exitCode == 0):
        return output
    else:
        raise ProcessException(command, exitCode, output)
Run Code Online (Sandbox Code Playgroud)

因此,当我启动一个类似的过程时Process.execute("mvn clean install"),我的程序会一直等到过程结束,然后我才能获得程序的完整输出.如果我正在运行需要一段时间才能完成的过程,这很烦人.

我可以让我的程序逐行写入进程输出,通过在循环结束之前轮询进程输出或其他内容吗?

**[编辑]抱歉,在发布此问题之前我没有很好地搜索.线程实际上是关键.在这里找到一个示例,说明如何执行此操作:** 来自线程的Python Subprocess.Popen

python subprocess

175
推荐指数
9
解决办法
16万
查看次数

用Python播放音频

如何从Python脚本播放音频(它可能就像1秒声音)?

如果它与平台无关,那将是最好的,但首先它需要在Mac上运行.

我知道我可以afplay file.mp3从Python中执行命令,但是可以在原始Python中执行吗?如果它不依赖外部库我也会更好.

python audio

101
推荐指数
10
解决办法
19万
查看次数

用Python控制rsync?

我一直想编写一个python脚本,它将按顺序运行几个rsync实例,以便将数据备份到另一台计算机.

目前我只有这个文本文件和我使用的命令,我只是将它们复制粘贴到终端中,看起来有点傻.

我希望能够使用python为我做这个.我非常清楚地知道如何使用subprocess.popen,但我不知道如何让python直接与rsync交互,比如输入我的密码.python能做到吗?

就像是:

if theProccess.proccessResponse == "Password:" :
    theProccess.respond(string)
Run Code Online (Sandbox Code Playgroud)

或者我能做的最好的就是拥有它,甚至是bash脚本,只需按顺序运行rsyncs并且必须反复输入我的密码?

提前致谢.

python bash rsync automation

17
推荐指数
3
解决办法
2万
查看次数

在django视图中使用subprocess.Popen()执行python脚本

我看了一下,但我似乎无法解决这个问题.我想在我的django应用程序的视图中执行python脚本.我已经在django管理命令中放置了我想要执行的代码,因此可以通过命令行访问它python manage.py command-name.然后我尝试使用运行此命令subprocess.Popen("python manage.py command-name",shell=True).

但是,此命令可能需要一些时间才能执行,因此我希望视图继续并允许脚本在后台执行.单独使用subprocess.Popen似乎会导致视图挂起,直到脚本完成,所以我尝试使用一个线程(跟随另一个 SA问题):

class SubprocessThread(threading.Thread):
def __init__(self, c):
    self.command = c
    self.stdout = None
    self.stderr = None
    threading.Thread.__init__(self)

def run(self):
    p = subprocess.Popen(self.command,
                         shell=True,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)

    self.stdout, self.stderr = p.communicate()
Run Code Online (Sandbox Code Playgroud)

然后执行它:

t = SubprocessThread("python manage.py command-name")
t.setDaemon(True)
t.start()
t.join()
Run Code Online (Sandbox Code Playgroud)

但是,视图仍然挂起:光标有一个忙符号,页面上的AJAX没有加载.否则,在线程调用看起来正常完成(脚本完成之前)后,页面的html似乎加载正常并且视图中的命令.有人可以帮帮我吗?我希望脚本能够在不阻止页面上的视图或AJAX调用的情况下执行并执行自己的操作.

python django multithreading subprocess

5
推荐指数
1
解决办法
3844
查看次数

标签 统计

python ×4

subprocess ×2

audio ×1

automation ×1

bash ×1

django ×1

multithreading ×1

rsync ×1