为什么在Python目录中创建后缀文件?

10

我有一个Python脚本,导入了一些Python模块,如bs4jsonosrequestssignalsystime。有时我会在我的当前目录下发现以下文件:

$ ls -la
-rw-rw-r-- 1 dotancohen dotancohen 12429677 Jun 26 11:37 bs4
-rw-rw-r-- 1 dotancohen dotancohen 12291853 Jun 26 11:36 json
-rwxrwxr-x 1 dotancohen dotancohen     1681 Jun 26 11:51 my-app.py
-rw-rw-r-- 1 dotancohen dotancohen 12291851 Jun 26 11:36 os
-rw-rw-r-- 1 dotancohen dotancohen 12291855 Jun 26 11:36 random
-rw-rw-r-- 1 dotancohen dotancohen 12291851 Jun 26 11:36 re
-rw-rw-r-- 1 dotancohen dotancohen 12429682 Jun 26 11:38 requests
-rw-rw-r-- 1 dotancohen dotancohen     7216 Jun 26 11:38 signal
-rw-rw-r-- 1 dotancohen dotancohen 12291852 Jun 26 11:36 sys
-rw-rw-r-- 1 dotancohen dotancohen 12429678 Jun 26 11:36 time

然而,这些并不是Python文件,而似乎是Postscript文件。例如:

$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1

$ head sys
%!PS-Adobe-3.0
%%Creator: (ImageMagick)
%%Title: (sys)
%%CreationDate: (2013-06-26T11:36:13+03:00)
%%BoundingBox: -0 -0 1920 1053
%%HiResBoundingBox: 0 0 1920 1053
%%DocumentData: Clean7Bit
%%LanguageLevel: 1
%%Orientation: Portrait
%%PageOrder: Ascend

我从未在这个目录下运行过任何与Postscript相关的内容。此外,即使我rm文件,在一段时间后它们似乎会重新出现,因此某些东西会周期性地创建它们。由于它们与Python脚本中导入的Python模块具有相同的名称,我怀疑它们之间存在关联。可能是什么原因?


其他文件怎么样:bs4jsonosrandomrerequestssignaltime - falsetru
1
你能查看这些文件吗?12MB的大小似乎是一张真实的图片,查看它是否是脚本中函数调用的分析图或者是Goatse的图片可能有助于找出它们的来源。 - abarnert
另外,你可以将你的源代码上传到某个地方吗?或者更好的是,你能创建一个最小化且剥离了无关因素的程序来重现同样的问题,并提供该程序的源代码给我们吗? - abarnert
你能否指明你正在使用的Python版本、IDE(如果有的话)以及操作系统,这可能有助于澄清发生了什么。 - Steve Barnes
1个回答

20
我会试着解决这个问题...... 这看起来像是当我没有指定Python解释器时不小心调用脚本的情况,比如我写了:./foo.py而不是python foo.py,或者在脚本开头没有#!行。当我这样做时,脚本在一段时间后由于语法错误而失败,并且目录中充满了名为sys、os、time等的文件,这正是我在脚本中导入的模块。这些新文件相当大(7MB)。执行head sys会显示文件内容基本与您的相同。我使用Linux(Ubuntu),没有IDE进行Python开发,只有一个bash shell。
以下是我认为正在进行的工作,至少在Linux上:如果您执行man import,您将看到
import - saves any visible window on an X server and outputs it as an image file. You can capture a single window, the entire screen, or any rectangular portion of the screen. [...] The import program is a member of the ImageMagick(1) suite of tools. Use it to capture some or all of an X server screen and save the image to a file.
因此,我猜想shell将Python import语句的第一行解释为/usr/bin/import命令,并将"参数"(模块名称)用作要保存的图像文件的名称。因此,在文件顶部有PS/ImageMagick的内容。
再次说明,我只在偶尔分神并没有指定Python解释器时才会遇到这个问题。由于我不知道您的代码或使用条件,无法保证这是您确切的问题,但我猜测您可能正在做类似的事情(也许是无意中)。我希望这可以帮助您并使您走上正确的轨道。
编辑:以下是一个基本重现您问题的实验。代码:
import sys
import random
import os
import time
import signal

def main():
    sys.stdout.write('foo\n')

if (__name__ == "__main__"):
    main()

我不使用Python来调用它:

./foo.py 
./foo.py: line 8: syntax error near unexpected token `('
./foo.py: line 8: `def main():'

有新文件:

$ ls
total 25096
-rwxr-xr-x 1 doug doug     146 2013-06-27 10:31 foo.py
-rw-r--r-- 1 doug doug 7291759 2013-06-27 10:12 os
-rw-r--r-- 1 doug doug 7291763 2013-06-27 10:12 random
-rw-r--r-- 1 doug doug 1903418 2013-06-27 10:32 signal
-rw-r--r-- 1 doug doug 1903415 2013-06-27 10:32 sys
-rw-r--r-- 1 doug doug 7291761 2013-06-27 10:12 time

看一下它们的内容:

$ head sys
%!PS-Adobe-3.0
%%Creator: (ImageMagick)
%%Title: (sys)
%%CreationDate: (2013-06-27T10:32:20-05:00)
%%BoundingBox: 0 0 663 471
%%HiResBoundingBox: 0 0 663 471
%%DocumentData: Clean7Bit
%%LanguageLevel: 1
%%Orientation: Portrait
%%PageOrder: Ascend

再次希望这能为你提供一些启示,并稍微帮助一下。


那就是问题所在。谢谢! - dotancohen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接