【发布时间】:2019-07-31 13:13:49
【问题描述】:
我正在使用来自第三方的脚本,我无法修改或显示(我们称之为 original.py),它接受一个文件并产生一些计算。最后它会输出一个结果(使用 print 语句)。
由于我有很多文件,我决定制作第二个脚本来获取所有想要的文件并通过 original.py 运行它们
第一次获取要运行的所有文件的列表
第二次通过 original.py 运行每个文件
第三次从每个文件中获取结果
我有第一步和第二步。但是,最终结果仅保存它读取的最后一个文件中的计算。
import sys
import original
import glob
import os
fn=str(sys.argv[1])
for filename in sys.argv[1:]:
print(filename)
ficheiros = [f for f in glob.glob(fn)]
for ficheiro in ficheiros:
original.file = bytes(ficheiro,'utf-8')
original.function()
总结一下: 知道我无法更改原始脚本(使用 print 语句制作),我如何获得每个循环的结果?有没有比使用 for 循环更好的方法?
第一个脚本可以用 python original.py 调用 它需要在 original.file 行的脚本中手动更改文件。
此脚本在控制台中输出结果,我将其重定向为:python original.py > result.txt
当我尝试运行我的脚本时,它会读取文件夹中所有正确的文件,但只返回最后一个文件的结果。
# (我试图重新表述这个问题,希望它更容易理解)
#问题是由于````ficheiros = [f for f in glob.glob(fn)]`````中的错误,它只读取一个文件,因此只输出一个结果。
感谢 cmets 中的 time.sleep() 技巧。
已解决:
我把开头的部分改成:
fn=str(sys.argv[1])
ficheiros= []
for filename in sys.argv[1:]:
ficheiros.append(filename)
#print(filename)
现在它可以正确读取所有文件并输出所有结果
【问题讨论】:
-
你调用的函数是打印还是返回值?听起来它正在打印,所以我不确定您所说的覆盖打印值是什么意思?
-
我知道你不能告诉我们
original.py,但你能告诉我们你会如何使用它吗?你会在命令行上做python original.py inputFile.txt吗? -
如果它真的在打印值,而不是返回它,那将是我第一次看到覆盖
sys.stdout(因此很难重定向输出 - 但它应该抢夺打印件!)有用... -
在
for ficheiro in ficheiros: original.function()中您遍历文件,但original.function没有获得此信息。也许original.function(ficheiro)? -
运行原始脚本它只是 python original.py。它没有任何论据。它使用的文件需要在脚本中手动更改。它直接在控制台中打印结果,我用 >file.txt 重定向它
标签: python loops import python-import