我无法在任何地方找到这个,很抱歉,如果我错过了。看起来它应该很简单,但不知何为不是。我有一个简单的程序打开一个日志(log1.lg让我们说)并删除任何不包含关键字的行。然后它将它们扔到第二个文件中,该文件重命名为Log1.lg.clean。
我实现这个的方法是使用os.rename,所以代码如下所示:
#define source and key words
source_log = 'Log1.lg'
bad_words = ['word', 'bad']
#clean up the log
with open(source_log) as orig_log, open('cleanlog.lg', 'w') as cleanlog:
for line in orig_log:
if not any9bad_word in line for bad_word in bad_words):
cleanlog.write(line)
#rename file and open in Notepad
rename = orig_log + '.clean'
new_log = os.rename("cleanlog.lg", rename)
prog = "notepad.exe"
subprocess.Popen(prog, new_log)
错误我得到的是:
File "C:\Users\me\Downloads\PythonStuff\stripMmax.py", line 23, in cleanLog
subprocess.Popen(prog, new_log)
File "C:\Python27\lib\subprocess.py", line 339, in __init__
raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer
我使用Python 2.7,如果相关的话。我不知道为什么这不起作用或为什么它需要bufsize。我已经看到了其他这样的例子,所以我想这个命令可能不会像我输入的那样在2.7中工作吗?
文档显示了如何使用引号中的实际文件名正确使用它,但正如您所看到的,我的这里包含一个似乎会导致问题的变量。提前谢谢!
答案 0 :(得分:0)
请在此处查看Popen
构造函数:subprocess.Popen
。 Popen
的第二个参数是bufsize
。这解释了你的错误。另请注意,os.rename
不会返回任何内容,因此new_log
将为None
。请改用rename
变量。你的电话应该是这样的:
subprocess.Popen([prog, rename])
您可能还想等待创建的Popen
对象:
proc = subprocess.Popen([prog, rename])
proc.wait()
或类似的东西。