Articles of subprocess

subprocess.call不工作在PyCharm(linux)

这个程序是: if os.name == 'posix' and getpass.getuser() != 'root': from subprocess import call call(["sudo", sys.executable, os.path.realpath(__file__), "–root-install"]) 当我从terminal运行它工作正常: > [sudo] Password for user: 但是,当我从PyCharm运行它terminal只是保持空白。 我也尝试手动设置stdin=sys.stdin, stdout=sys.stdout ,但这并没有改变任何东西。 我在这里做错了什么?

如何暂停Python脚本的bash脚本?

我想暂停Python脚本的bash脚本,步骤如下所示: 我从Python脚本reader.py启动script writer.sh。 当writer.sh输出第三行时,我想要使用reader.py某个命令暂停执行此脚本。 我想在reader.py中使用一些命令来恢复writer.sh的执行。 下面是这两个脚本,问题是在writer.sh中执行sleep命令时, writer.sh不会暂停。 所以我的问题是,当它输出string“第三”时如何暂停writer.sh ? 确切地说(这是我的工作中的实际问题)我希望writer.sh停止,因为reader.py停止阅读writer.sh输出。 reader.py : import subprocess from time import sleep print 'One line at a time:' proc = subprocess.Popen('./writer.sh', shell=False, stdout=subprocess.PIPE, ) try: for i in range(4): output = proc.stdout.readline() print output.rstrip() if i == 2: print "sleeping" sleep(200000000000000) except KeyboardInterrupt: remainder = proc.communicate()[0] print "remainder:" print […]

为什么不这subprocess.check_call()工作?

我在Ubuntu 12上使用Python 2.7运行这些片段。 import subprocess args = ['rsync', '–rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] subprocess.check_call(args) 失败 import subprocess args = ['rsync', '–rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] call_string = ' '.join(args) subprocess.check_call(call_string) 作品 第一个代码片段导致rsync获取无效的命令行。 使用这个选项的短版本( -e )没有任何区别。 如果我删除 – – 部分工作正常。 使用shell=True并没有什么区别。 从“ssh”消除引号没有任何区别,我想保留引号,所以我可以传递参数给ssh。 有什么问题?

在subprocess中运行bash,如果在等待`read -s`时中断了tty的stdout?

正如@Bakuriu在注释中指出的,这与BASH中的问题基本相同:在input中断Ctrl + C时终止当前terminal然而,当bash作为另一个可执行文件的subprocess运行时,我只能重现问题,而不是直接来自bash ,它似乎处理terminal清理罚款。 我会感兴趣的是为什么bash似乎在这方面被打破。 我有一个Python脚本,旨在logging由该脚本启动的subprocess的输出。 如果subprocess恰好是一个bash脚本,在某些时候通过调用read -s内build-s ( -s ,防止input字符的回显,作为键)读取用户input,并且用户中断脚本Ctrl-C),然后bash无法将输出恢复到tty,即使它继续接受input。 我把这个简化为一个简单的例子: $ cat test.py #!/usr/bin/python import subprocess as sp p = sp.Popen(['bash', '-c', 'read -s foo; echo $foo']) p.wait() 在运行./test.py它会等待一些input。 如果您键入一些input,然后按Enter键,则脚本会按照预期返回并回显您的input,而不存在任何问题。 但是,如果您立即点击“Ctrl-C”,Python会显示KeyboardInterrupt的回溯,然后返回到bash提示符。 但是,您键入的任何内容都不会显示在terminal上。 键入reset<enter>成功重置terminal,但是。 我对这里发生的事情感到有些不知所措。 更新:我设法在没有Python的情况下重现这一点。 我正在试图运行bash,看看我能不能收集到任何正在发生的事情。 用下面的bash脚本: $ cat read.sh #!/bin/bash read -s foo echo $foo 运行strace ./read.sh并立即按下Ctrl-C生成: … ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE […]

Python:给subprocess提供input

我必须使用python脚本创build一个具有pipe理权限的新进程。 我在网上search了这个话题,发现我必须使用runas命令。 对于这个命令,我必须给用户,并在运行时,脚本将等待密码,我想这样做尽可能自动。 这是我的代码: import subprocess p = subprocess.Popen(['runas', '/user:Armando', szCmdCommand], stdin = subprocess.PIPE) p.stdin.write('password') 而不是写。我试过p.communicate(input='password')但它不工作,因为它没有写密码。 发生的唯一情况是脚本不会等待input。 它会自动input一个错误的密码,并且不能执行我的命令。 我能做些什么来解决这个问题?

我怎样才能访问subprocess的STDIN?

我想运行命令: nc localhost 9998 然后,我希望我的脚本监视文件,并在文件更改时将文件的内容回显到此subprocess。 我无法制定重新定向计划。 如何获得subprocess的STDIN?

到Linux的Python可执行文件列出大小的文件

我需要我的test.py在LINUX shell中显示以下内容 – 列出目录中的所有文件 – 文件大小以字节为单位的降序(必须显示字节) – 显示文件总数和总大小(X文件X总大小) – 不包括其他子目录中的子目录或文件 这里是我的python可执行文件 #!/usr/bin/env python import subprocess subprocess.call(["ls", "-l", "-S", "-s"]) 这显示了文件和他们的大小降序,但它包括我不想要的文件夹/子目录 另外用subprocess.call([“find”,“-type”,“f”])replacesubprocess.call只显示没有不需要的date和时间的文件,但我不知道如何得到我想要的信息。 我的Python代码: #!/usr/bin/env python import subprocess, os, operator directory='e:\\Programs/Cyg/home/Dylan/test' list=os.listdir(directory) pairs=[] for file in list: if os.path.isfile: location=os.path.join(directory, file) size=os.path.getsize(location) pairs.append((file,size)) pairs.sort(key=operator.itemgetter(0)) for pair in pairs: print (pair)

从python调用进程的最快方法?

什么是从python执行可执行文件最快/最有效的方法? 在我看来,os.system比subprocess.popen快。 我希望能够读出这个过程中出现的问题,但是比其他任何东西都重要的是速度。

如何使用subprocess模块中的列表中的索引?

还没用过python,所以还在学习。 基本上,我有一个与特定工作有关的ID列表。 目前我只是想能够传递列表中的第一个ID(使用a [0]),并将请求的输出打印到hello.txt。 所以整个命令本身将看起来像bjobs -l 000001> hello.txt。 一旦我完成了这个工作,我可以遍历整个ID文件,为每个命令输出创build一个单独的文件。 #! /usr/bin/python import subprocess a = [ln.rstrip() for ln in open('file1')] subprocess.call(["bjobs -l ", a[0], "> hello.txt"], shell=True) 任何帮助,将不胜感激! 如果我没有明确表示什么,那么请问,我会尽力解释。

subprocess.check_output与grep:退出状态2

我以前使用过的subprocess没有任何问题,由于某种原因,当我尝试与grep: grepOut = subprocess.check_output("grep 'hello' tmp", shell=True) 我得到以下错误: File "/usr/lib/python2.7/subprocess.py", line 544, in check_output raise CalledProcessError(retcode, cmd, output=output) subprocess.CalledProcessError: Command '['grep', "'hello'", 'tmp']' returned non-zero exit status 2 通过在terminal中直接input命令,我不会得到任何错误。 编辑:看到clemej的解释的答案