小编jco*_*ado的帖子

subprocess.Popen()IO重定向

尝试将子进程的输出重定向到文件.

server.py:

while 1:
    print "Count " + str(count)
    sys.stdout.flush()
    count = count + 1
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

Laucher:

cmd = './server.py >temp.txt'
args = shlex.split(cmd)
server = subprocess.Popen( args )
Run Code Online (Sandbox Code Playgroud)

输出显示在屏幕上,temp.txt保持为空.我究竟做错了什么?

作为背景我试图捕获已经编写的程序的输出.

我不能用:

server = subprocess.Popen(
                [exe_name],
                stdin=subprocess.PIPE, stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

因为该程序可能不会刷新.相反,我打算通过fifo重定向输出.如果我手动启动server.py,这很好,但显然不是因为我Popen()导致重定向不起作用. ps -aux显示server.py正确启动.

python popen

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

可以输入if语句吗?

我有一个脚本,如果它运行,每次输出大约10行.这些行的内容各不相同.

我真的希望能够grep在输出中根据输出做不同的事情.

在伪这是我想做的

cat /etc/password | \\
if [ grep "root" $STDOUT ]; then
   echo "root is found"

elif [ grep "nobody" $STDOUT ]; then
   echo "nobody is found"

fi
Run Code Online (Sandbox Code Playgroud)

我在这里cat /etc/password作为一个例子,但应该用我上面提到的脚本替换它.

问题是,我怎么输出保持从cat /etc/passwordif/ elif条件?

linux bash

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

在多处理中使用defaultdict?

只是尝试和学习,我知道如何创建一个可以通过多个程序访问的共享字典,但我不知道如何保持dict同步.defaultdict我相信,这说明了我遇到的问题.

from collections import defaultdict
from multiprocessing import Pool, Manager, Process

#test without multiprocessing
s = 'mississippi'
d = defaultdict(int)
for k in s:
    d[k] += 1

print d.items() # Success! result: [('i', 4), ('p', 2), ('s', 4), ('m', 1)]
print '*'*10, ' with multiprocessing ', '*'*10

def test(k, multi_dict):
    multi_dict[k] += 1

if __name__ == '__main__':
    pool = Pool(processes=4)
    mgr = Manager()
    multi_d = mgr.dict()
    for k in s:
        pool.apply_async(test, (k, multi_d))

    # Mark pool as closed …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing defaultdict

9
推荐指数
1
解决办法
2481
查看次数

pyparsing的例子

这是我第一次尝试使用pyparsing,我想问一下如何过滤这个样本行:

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812'''
Run Code Online (Sandbox Code Playgroud)

获得如下输出:1,52.125133215643,21.031048525561,116.898812

一般来说,我有理解pyparsing逻辑的问题,所以对这个例子的任何帮助将不胜感激.谢谢

python pyparsing

8
推荐指数
1
解决办法
6430
查看次数

python退出无限循环与KeyboardInterrupt异常

按下Ctrl + C时,我的while循环不会退出.它似乎忽略了我的KeyboardInterrupt异常.循环部分如下所示:

while True:
  try:
    if subprocess_cnt <= max_subprocess:
      try:
        notifier.process_events()
        if notifier.check_events():
          notifier.read_events()
      except KeyboardInterrupt:
        notifier.stop()
        break
    else:
      pass
  except (KeyboardInterrupt, SystemExit):
    print '\nkeyboardinterrupt found!'
    print '\n...Program Stopped Manually!'
    raise
Run Code Online (Sandbox Code Playgroud)

同样,我不确定问题是什么,但我的终端甚至从未打印过我的异常中的两个打印警报.有人能帮我解决这个问题吗?

python systemexit infinite-loop keyboardinterrupt try-except

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

不一致字符串格式的数据分析

我有这个任务,我一直在努力,但我对我的方法有极度的疑虑.

所以问题是我有大量奇怪的格式化(并且不一致)的excel文件,我需要为每个条目提取某些字段.示例数据集是

看看数据

我最初的方法是这样的:

  1. 导出到csv
  2. 分成县
  3. 分成几个区
  4. 分别分析每个区域,提取值
  5. 写入output.csv

我遇到的问题是格式(看似组织良好)几乎是随机文件.每行包含相同的字段,但顺序,间距和措辞不同.我编写了一个脚本来正确处理一个文件,但它不适用于任何其他文件.

所以我的问题是,是否有更强大的方法来处理这个问题,而不是简单的字符串处理?我想到的是更多的模糊逻辑方法,试图固定一个项目的哪个字段,这可以处理输入有点任意.你会如何解决这个问题?

如果它有助于解决问题,这里是我写的脚本:

# This file takes a tax CSV file as input
# and separates it into counties
# then appends each county's entries onto
# the end of the master out.csv
# which will contain everything including
# taxes, bonds, etc from all years

#import the data csv
import sys
import re
import csv

def cleancommas(x):
  toggle=False
  for i,j in enumerate(x):
    if j=="\"":
      toggle=not toggle
    if toggle==True:
      if j==",":
        x=x[:i]+" …
Run Code Online (Sandbox Code Playgroud)

python csv processing text

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

xargs:重定向后的变量替换

我正在尝试查找所有具有编码iso-8859-1的文本文件,并将它们转换为UTF-8.我到目前为止的尝试是:

find . -name '*.txt' | xargs grep 'iso-8859-1' | cut -d ':' -f1 | 
xargs iconv -f ISO-8859-1 -t UTF-8 {} > {}.converted
Run Code Online (Sandbox Code Playgroud)

(显而易见的)问题是最后一个变量替换不起作用,因为{}在重定向之后发生,并且不属于xargs.因为我只得到一个文件{}.converted,而不是 a.txt.converted,b.txt.converted等等.我怎样才能使这个工作?

注意:我在Cygwin上这样做,其中iconv似乎不支持-o.

bash find xargs

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

python列表和变量到html模板

将输出列表和变量很好地输入HTML模板的最佳方法是什么?

list = ['a', 'b', 'c']

template = '''<html>
<title>Attributes</title>
- a
- b
- c
</html>'''
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

python template-engine

4
推荐指数
1
解决办法
8757
查看次数

Python - 单击一个javascript按钮

我在页面上有一个按钮需要单击以便我继续按顺序进入下一页,我想知道如何使用Python实现这一点.该按钮似乎是HTTP POST请求和Javascript的混合,这是按钮的代码:

<FORM name="ff" action="nq2.phtml" method="post">
  <INPUT type="hidden" name="target" value="-1">
  <INPUT type="hidden" name="fact" value="">
  <INPUT type="hidden" name="parm" value="">
  <INPUT type="hidden" name="use_id" value="-1">
  <INPUT type="hidden" name="nxactor" value="1">
  <TD align="center" valign="top">
  <DIV class="pr">
  <A href="javascript:;" onClick="settarget(5); setch(ch5); return false;">
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道如何处理这样的事情,并且想知道是否有人对我将如何去做这些事情有所了解.

html javascript python post

4
推荐指数
1
解决办法
6813
查看次数

如何为需要文件名而不是变量的python子进程调用提供输入?

我试图在python中调用shell脚本(segment.sh).在控制台上生成正确结果的语法是:

> ./segment.sh ctb file.txt utf-8 0
Run Code Online (Sandbox Code Playgroud)

可以看出,这个shell脚本需要一个文本文件作为输入.我想要做的是打开文件并在python中读取其内容(稍后最好从HTML POST表单),并以某种方式将包含内容的变量传递给python子进程调用.

以下功能无效.但是如果我只是提供一个文件名,例如:

Popen(["/bin/bash", "./segment.sh", "ctb", "file.txt", "utf-8", "0"])`
Run Code Online (Sandbox Code Playgroud)

然后,它会工作,但我想从变量传递输入.你能给我一些指示吗?

def pySegment(text):
    op = subprocess.Popen(["/bin/bash", "./segment.sh", "ctb", "utf-8", "0"],
                      stdout = subprocess.PIPE,
                      stdin  = subprocess.PIPE,
                      stderr = subprocess.STDOUT,                          
                      )
    results = op.communicate(input=text)[0]
    return results

if __name__ == "__main__":
    filename = "./file.txt"
    text = open(filename).read()
    result = pySegment(text)
    print result
Run Code Online (Sandbox Code Playgroud)

python variables shell subprocess pipe

4
推荐指数
1
解决办法
2365
查看次数