Articles of subprocess

使用subprocess注销没有sudo

我希望我的脚本在脚本完成时自动将当前用户注销。 它将在基于Linux的服务器(Ubuntu)上运行。 我已经尝试了这一行代码,但它不会工作。 subprocess.call(['logout']) 发生以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 我也试过: subprocess.Popen(['sudo', 'logout']) 但是那么用户将不得不input他的密码才能被注销。 没有sudo在这一个我得到: Traceback […]

当shell = True时检测Popen()错误

我想在该用户的$SHELL执行任意用户提供的命令。 这个命令可能是短命的(比如ls )或者是长命的(比如firefox ),也可能是一个命令,一个pipe道或者任何其他shell支持的构造。 执行方法必须代表shell成功或失败,不论是何时或是否终止,都不能阻塞。 该命令可能永远不会终止,直到执行的方法返回并继续我的程序。 Popen()与shell=True不会阻止,但也不表示失败。 subprocess辅助函数会阻塞,在这里没有用。 Popen.poll() (在这个问题中build议)返回None直到命令终止,并且在失败时不会立即返回非None (它必须重复调用,直到shell终止)。 作为期望的行为的一个例子 prog1 = shell_run('blocking_prog', stdin=PIPE, stdout=PIPE) prog2 = shell_run('nonsense_prog', stdin=PIPE, stdout=PIPE) 第一行应该给prog1分配一个Popen对象,第二行应该引发一个OSError或类似的东西。 我是否认为在这些条件下不可能检测到Popen()错误是正确的?

在子stream程中调用包装脚本

我有一个wrapperexec ,它应该调用exec和一些参数。 subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=True, cwd="/dirA" ) 当我调用上面的脚本时,它不传递任何参数给wrapperexec 。 但是当我改变到: subprocess.check_call( ["wrapperexec", "exec", "arg1"], shell=False, cwd="/dirA" ) 它确实按预期传递了参数。 有人可以向我解释,为什么前者不行? 编辑: 对不起,我在创build这个问题时是完全错误的。 现在更新到真正的问题。

Hcitool lescan将不会实时打印到文件中

更新:我使用os.system解决了我的解决scheme: sensortag=0 while sensortag != "B4:99:4C:64:33:E0": #call the command and write to scan.txt file and then fill the process. #loop to find if the MAC address given is available os.system("hcitool lescan> scan.txt & pkill –signal SIGINT hcitool") scan = open("scan.txt","r") readscan = scan.read() if "B4:99:4C:64:33:E0" in readscan: print "SensorTag found." sensortag = "B4:99:4C:64:33:E0" 我有两个程序,基本上是一样的,但有两个不同的命令,在Raspberry PI上运行Raspbian。 […]

python subprocess.Popen(shell = True)创build的进程的pid不是生成的shell的pid

我有一个testingPython脚本: test.py: #coding=utf-8 import os import time print os.getpid() 通过subprocess.Popen调用它: p = sp.Popen("python test.py", shell=True) print p.pid 这两个打印语句的不同输出是预期的,因为p.pid应该是所产生的shell进程的pid,但是实际输出是: In [18]: p = sp.Popen("python test.py", shell=True) In [19]: 19108 In [19]: p.pid Out[19]: 19108

操作系统如何处理Python脚本的Python和subprocess?

我的问题有点独特。 我目前正在为我的计算机取证类做一个项目。 该项目旨在隐藏调查人员的磁盘数据。 应该达到的方法是将“干净”文件的字节写在“坏”文件上。 一旦覆盖,“坏”文件被删除。 这个概念听起来很简单,但我和我的合作伙伴观察到的是有趣的。 如果我们用python脚本打开一个文件,我们可以轻松地覆盖与该文件相关联的内存(使用ddvalidation)。 我们也可以从脚本中轻松删除一个文件。 然而,写入然后删除结果在实际上没有写入发生,只有文件的删除。 这从操作系统优化的angular度来看是有道理的。 从这一点来看,如果我们把写作和删除分成两个独立的脚本,并且由三分之一控制,我们认为它可能会起作用。 但是,即使我们将脚本作为另一个脚本的subprocess运行,也会发生同样的情况。 我们已经尝试使用bash脚本进行删除处理,而不是使用纯Python,而且还没有任何粘附。 这个项目本来就是这样一个小小的反辩证法工具,但是这个特定的项目由于这个问题已经引起了我们的全部关注。 有没有人有一个想法,为什么发生这种情况,我们可以做什么向前迈进? 我们知道这可以用C等来实现,但是我们想用python解决这个问题,因为它提供了有趣的约束。 —编辑—这是从我们的控制器的一个片段,它与相关的参数调用“ghost.py”。 ghost.py将编辑的文件名/path打印到标准输出。 相关的代码如下: proc = subprocess.Popen(['python', 'ghost.py', '-c', 'good.txt', '-d','/mnt/evil.txt'], stdout=subprocess.PIPE,) files = proc.communicate() for i in files: if i != None and i != "\n": os.system("./del.sh " + i)

奇怪的pipe道行为在节点的child_process?

我有一个在terminal工作正常的shell命令,但由节点的child_process错误执行时。 这里是terminal中使用的命令( file.json是一个json文件) : cat /tmp/file.json | jq 这里是从child_process运行相同的命令: var cp = require("child_process"); var command = "cat /tmp/gen_json | jq"; cp.exec(command, function(err, stdout, stderr) { stderr ? console.log(stderr) : console.log(stdout); }); 其中产生: jq – commandline JSON processor [version 1.5-1-a5b5cbe] Usage: jq [options] <jq filter> [file…] jq is a tool for processing JSON inputs, applying the […]

如何closuresQtsubprocess并让subprocess执行清理代码?

我正在Linux / Qt中启动一个进程,然后使用QProcess启动一些subprocess。 然后最终我想要优雅地closuressubprocess(也就是执行一些清理代码)。 subprocess正在使用QSharedMemory ,现在当我调用QProcess :: close()时,subprocess正在closures而不调用QSharedMemory :: detach() ,结果是所有的进程都closures了,但是还剩下共享内存不清理。 我有subprocess的代码,在代码中有函数cleanup() 。 父进程如何以这样的方式closuresQProcess,以便subprocess执行cleanup() ?

使用python与java程序进行交互

可能重复: 用Python中的“subprocess”调用Java应用程序并读取Java应用程序输出 基本上我正在寻找的是,我想与java程序进行交互,而其运行使用Python,所以我可以访问其输出,并将input传递给它。 我设法使用python运行一个Java程序。 我想知道我可以访问我的Python程序中的Java程序的输出。 例如。 在java程序中:System.out.println(“Enter no。”); 在Python中,我应该能够得到“input否”作为string,并从python.a传递到Java程序的价值 我做了什么,直到不:Python程序: import sys import os.path,subprocess def compile_java(java_file): subprocess.check_call(['javac', java_file]) def execute_java(java_file): java_class,ext = os.path.splitext(java_file) cmd = ['java', java_class] subprocess.call(cmd, shell=False) def run_java(java_file): compile_java(java_file) execute_java(java_file) Java程序: import java.io.*; import java.util.*; class Hi { public static void main(String args[])throws IOException { Scanner t=new Scanner(System.in); System.out.println("Enter any integer"); int […]

带有模拟的Child_process?

我试图在我的节点脚本中创build一个虚拟的bash,在另一个用户上下文中执行命令。 var spawn = require('child_process').spawn; var terminal = spawn('bash', [], { uid: 1001 }); terminal.stdout.on('data', function (data) { console.log('stdout: ' + data); }); terminal.stderr.on('data', function (data) { console.log('stderr: ' + data); }); terminal.on('close', function (code) { console.log('child process exited with code ' + code); }); terminal.stdin.write('echo Hello $USER'); terminal.stdin.end(); 以root身份执行这个输出后, Hello root 正如你可以在我的例子中看到我已经传递了一个用户ID到产卵,但是这不影响任何东西。 我期望的输出是(假设用户名是'foobar'): Hello […]