相关疑难解决方法(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将字符串复制到Windows上的剪贴板?

我正在尝试创建一个基本的Windows应用程序,用户输入构建一个字符串,然后将其添加到剪贴板.如何使用Python将字符串复制到剪贴板?

python clipboard

170
推荐指数
14
解决办法
14万
查看次数

如何在没有换行的情况下回应事物?

我有以下代码......

for x  in ${array[@]}
               do
                  echo $x
               done| sort
Run Code Online (Sandbox Code Playgroud)

结果是这样的

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

有没有办法打印它1 2 3 4 5?每次都不添加换行符?

我也printf按照另一篇文章的建议尝试过,但它仍在打印新行

for x  in ${array[@]}
               do
                  printf '%s' "$x"
               done| sort
Run Code Online (Sandbox Code Playgroud)

bash

11
推荐指数
3
解决办法
6万
查看次数

Python子进程安全性

我理解为什么如果你有不受信任的输入,使用'shell = True'可能会带来安全风险.但是,我不明白'shell = False'是如何避免同样的风险的.

假设我想允许用户提供他可能输入的输入:var ="rm -rf /"

我的代码可能只是:

subprocess.call(var,shell=True) # bad stuff
Run Code Online (Sandbox Code Playgroud)

或者我可能会这样做:

varParts=var.split()
subprocess.call(varParts,shell=False) # also bad, right?
Run Code Online (Sandbox Code Playgroud)

看起来这个假设是不会像第二个例子那样经历处理输入的麻烦,因此这会/不可能发生?

python subprocess

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

标签 统计

python ×3

subprocess ×2

bash ×1

clipboard ×1

stdin ×1