如果我使用python命令,我必须打开一个文件,写入它,然后关闭它。
foo = open("file name", w+)
foo.write("blah")
foo.close()
通过使用subprocess.run
,我可以运行一个linux shell命令subprocess.call(['echo', 'blah', '>', 'foo'])
。
这种情况发生在一个无限循环中,每一秒重复一次,因此应该花费尽可能短的时间。
问题是我应该使用哪种方法?
这比你所期望的还要糟糕!重定向是一个shell操作,因此您的命令不会得到预期的结果。最好的情况下,如果它能在PATH中找到一个echo
命令,它会在标准输出上写入blah > foo
,更糟糕的情况是,它会因为找不到echo命令而失败。要使子流程命令工作,您必须添加一个shell=True
参数。
然后,在每次操作中,您都将启动一个新的shell来执行echo命令。启动流程是一项昂贵的操作。如果你只每秒循环一次,它可能甚至不会引起注意,但它比直接写入文件要贵得多。
但最Python的方法是使用上下文管理器:
with open("file name", "w") as foo:
foo.write('blahn')