Python创建空文件 - Unix

gar*_*may 2 python subprocess

我想在Unix环境中使用Python脚本创建空文件.可以看到提到实现相同的不同方式.一个人比另一个人有什么好处/陷阱.

os.system('touch abc')

open('abc','a').close()

open('abc','a')

subprocess.call(['touch','abc'])
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 6

嗯,首先,依赖的touch不可携带的.例如,如果没有安装CygWin,GNUWin32或其他提供touch实用程序的软件包,它们将无法在标准Windows下运行.

它们还涉及创建一个单独的工作流程,在这种情况下完全没有必要.

在这四个中,我可能会使用,open('abc','a').close()如果意图是尝试只是创建文件,如果它不存在.在我看来,这使得意图明确.

但是,如果你想创建一个文件,我可能会使用w写模式而不是a附加模式.

此外,您可能还希望捕获异常,例如,如果您无法实际创建该文件.


tri*_*eee 6

TLDR:使用

open('abc','a').close()
Run Code Online (Sandbox Code Playgroud)

(或者如果意图是截断文件(如果它已经存在)'w','a'则代替.

调用一个单独的进程来执行Python可以自己做的事情是浪费的,并且不可移植到外部命令不可用的平台.(另外,os.system使用两个进程 - 一个用于解析命令行的shell - 并且正在被弃用以支持subprocess.)

完成后不关闭打开的文件句柄是不好的做法,并且可能导致较大程序中的资源耗尽(如果打开越来越多的文件并且从不关闭它们,则会耗尽文件句柄).

  • 如果名称对应于命名管道,则open()`可能会阻塞.您可以[使用`os.open()`以非阻塞模式打开它](http://stackoverflow.com/a/28084217/4279). (2认同)