尝试将子进程的输出重定向到文件.
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正确启动.
我有一个脚本,如果它运行,每次输出大约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/password在if/ elif条件?
只是尝试和学习,我知道如何创建一个可以通过多个程序访问的共享字典,但我不知道如何保持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) 这是我第一次尝试使用pyparsing,我想问一下如何过滤这个样本行:
survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812'''
Run Code Online (Sandbox Code Playgroud)
获得如下输出:1,52.125133215643,21.031048525561,116.898812
一般来说,我有理解pyparsing逻辑的问题,所以对这个例子的任何帮助将不胜感激.谢谢
按下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
我有这个任务,我一直在努力,但我对我的方法有极度的疑虑.
所以问题是我有大量奇怪的格式化(并且不一致)的excel文件,我需要为每个条目提取某些字段.示例数据集是

我最初的方法是这样的:
我遇到的问题是格式(看似组织良好)几乎是随机文件.每行包含相同的字段,但顺序,间距和措辞不同.我编写了一个脚本来正确处理一个文件,但它不适用于任何其他文件.
所以我的问题是,是否有更强大的方法来处理这个问题,而不是简单的字符串处理?我想到的是更多的模糊逻辑方法,试图固定一个项目的哪个字段,这可以处理输入有点任意.你会如何解决这个问题?
如果它有助于解决问题,这里是我写的脚本:
# 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) 我正在尝试查找所有具有编码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.
将输出列表和变量很好地输入HTML模板的最佳方法是什么?
list = ['a', 'b', 'c']
template = '''<html>
<title>Attributes</title>
- a
- b
- c
</html>'''
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我在页面上有一个按钮需要单击以便我继续按顺序进入下一页,我想知道如何使用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)
老实说,我不知道如何处理这样的事情,并且想知道是否有人对我将如何去做这些事情有所了解.
我试图在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 ×8
bash ×2
csv ×1
defaultdict ×1
find ×1
html ×1
javascript ×1
linux ×1
pipe ×1
popen ×1
post ×1
processing ×1
pyparsing ×1
shell ×1
subprocess ×1
systemexit ×1
text ×1
try-except ×1
variables ×1
xargs ×1