相关疑难解决方法(0)

Python - 如何将字符串传递给subprocess.Popen(使用stdin参数)?

如果我执行以下操作:

import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__
    (p2cread, p2cwrite,
  File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles
    p2cread = stdin.fileno()
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
Run Code Online (Sandbox Code Playgroud)

显然,一个cStringIO.StringIO对象不能足够接近文件duck以适应subprocess.Popen.我该如何解决这个问题?

python stdin subprocess

263
推荐指数
10
解决办法
29万
查看次数

如何写入Python子进程'stdin?

我正在尝试编写一个启动子进程的Python脚本,并写入子进程stdin.我还希望能够确定子进程崩溃时要采取的操作.

我正在尝试启动的过程是一个程序nuke,它有自己的内置版本的Python,我希望能够提交命令,然后告诉它在执行命令后退出.到目前为止,我已经知道,如果我在命令提示符上启动Python,然后nuke作为子进程启动,那么我可以输入命令nuke,但我希望能够将所有这些都放在一个脚本中,以便主Python程序可以启动nuke然后写入其标准输入(因此也可以写入其内置版本的Python),并告诉它做一些时髦的东西,所以我编写了一个脚本,nuke如下所示:

subprocess.call(["C:/Program Files/Nuke6.3v5/Nuke6.3", "-t", "E:/NukeTest/test.nk"])
Run Code Online (Sandbox Code Playgroud)

然后没有任何事情发生,因为nuke等待用户输入.我现在如何写入标准输入?

我这样做是因为我正在运行一个插件nuke,导致它在渲染多个帧时间歇性地崩溃.所以我希望这个脚本能够启动nuke,告诉它做某事然后如果它崩溃了,再试一次.因此,如果有办法赶上崩溃并且仍然可以,那就太棒了.

python stdin subprocess nuke

55
推荐指数
3
解决办法
8万
查看次数

Python子流程和用户交互

我正在使用Python 2.6中的GUI前端,通常它非常简单:您使用subprocess.call()subprocess.Popen()发出命令并等待它完成或对错误做出反应.如果您的程序停止并等待用户交互,您会怎么做?例如,程序可能会停止并询问用户是否有ID和密码或如何处理错误?

c:\> parrot
Military Macaw - OK
Sun Conure - OK
African Grey - OK
Norwegian Blue - Customer complaint!
(r) he's Resting, (h) [Hit cage] he moved, (p) he's Pining for the fjords
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所阅读的所有内容都告诉您如何在程序完成后才读取程序的所有输出,而不是在程序运行时如何处理输出.我无法安装新模块(这是一个LiveCD),我将不止一次处理用户输入.

python command-line frontend subprocess popen

27
推荐指数
1
解决办法
2万
查看次数

子进程 readline 挂起等待 EOF

我有一个简单的 C++ 程序,我试图通过 python 脚本执行它。(我对编写脚本非常陌生)并且我在通过管道读取输出时遇到问题。从我所见,如果没有 EOF,readline() 似乎无法工作,但我希望能够在程序中间读取并使脚本响应输出的内容。它不读取输出,而是挂起 python 脚本:

#!/usr/bin/env python
import subprocess
def call_random_number():
    print "Running the random guesser"
    rng = subprocess.Popen("./randomNumber", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
    i = 50
    rng.stdin.write("%d\n" % i)
    output = rng.stdout.readline()
    output = rng.stdout.readline()

call_random_number()
Run Code Online (Sandbox Code Playgroud)

c++ 文件生成 1 到 100 之间的随机数,然后检查用户的猜测,直到他们猜对为止

#include<iostream>
#include<cstdlib>

int main(){
  std::cout<< "This program generates a random number from 1 to 100 and asks the user to enter guesses until they succuessfully guess the number.  It then tells the user how many …
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout pipe readline

6
推荐指数
1
解决办法
9622
查看次数

在发送 stdin 输入之前等待来自子进程的提示

我有一个 linux x86 二进制文件,它要求输入密码并打印出密码是正确还是不正确。我想使用 python 来模糊输入。

下面是我运行二进制文件的屏幕截图,然后给它字符串“asdf”,并收到字符串“不正确”

截屏:

截屏

到目前为止,我已经尝试使用 Python3 subprocess 模块来

  1. 将二进制文件作为子进程运行
  2. 收到密码提示
  3. 发送一个字符串。
  4. 收到回复

这是我的脚本

p = subprocess.Popen("/home/pj/Desktop/L1/lab1",stdin=subprocess.PIPE, stdout=subprocess.PIPE)
print (p.communicate()[0])
Run Code Online (Sandbox Code Playgroud)

运行这个脚本的结果是

b'Please supply the code: \nIncorrect\n'
Run Code Online (Sandbox Code Playgroud)

我希望只收到提示,但是在我有机会发送我的输入之前,二进制文件也返回了不正确的响应。

我如何改进我的脚本以便成功地与这个二进制文件交互?

python subprocess fuzzing

6
推荐指数
1
解决办法
2849
查看次数

标签 统计

python ×5

subprocess ×5

stdin ×2

command-line ×1

frontend ×1

fuzzing ×1

nuke ×1

pipe ×1

popen ×1

readline ×1

stdout ×1