Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序在空闲状态下运行,但不通过命令行_Python_Python 2.7 - Fatal编程技术网

Python 程序在空闲状态下运行,但不通过命令行

Python 程序在空闲状态下运行,但不通过命令行,python,python-2.7,Python,Python 2.7,这是我的代码,我们称之为“example.py” 当我在空闲状态下运行这个程序时,它工作得很好,但是当我在命令行中运行它时,它会出现以下错误 Traceback (most recent call last): File "example.py", line 15, in <module> fileNameList = data_files[0] IndexError: list index out of range 回溯(最近一次呼叫最后一次): 文件“example

这是我的代码,我们称之为“example.py”

当我在空闲状态下运行这个程序时,它工作得很好,但是当我在命令行中运行它时,它会出现以下错误

Traceback (most recent call last):
  File "example.py", line 15, in <module>
    fileNameList = data_files[0]
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“example.py”,第15行,在
fileNameList=数据文件[0]
索引器:列表索引超出范围
我只能假设它无法从命令行获取文件夹中的文件列表,我是python编程新手,因此如果有人能解决这个问题或至少解决我的问题,我将不胜感激。

您应该:

data_files = [x[2] for x in os.walk(os.getcwd())]
问题是,当您从命令行运行它时,argv[0]只是您用来调用文件的名称(
example.py
),而不是文件的完整绝对路径(IDLE使用的是该路径)。因此,
os.path.dirname
不会从中得到任何东西

请注意,如果从其他目录运行该文件,如:

python ../my_examples/example.py
此脚本将迭代您当前所在的目录,而不是
example.py
所在的目录。如果要使用
example.py
所在的目录,可以执行以下操作:

data_files = [x[2] for x in os.walk(os.path.abspath(__file__))]
你应该做:

data_files = [x[2] for x in os.walk(os.getcwd())]
问题是,当您从命令行运行它时,argv[0]只是您用来调用文件的名称(
example.py
),而不是文件的完整绝对路径(IDLE使用的是该路径)。因此,
os.path.dirname
不会从中得到任何东西

请注意,如果从其他目录运行该文件,如:

python ../my_examples/example.py
此脚本将迭代您当前所在的目录,而不是
example.py
所在的目录。如果要使用
example.py
所在的目录,可以执行以下操作:

data_files = [x[2] for x in os.walk(os.path.abspath(__file__))]

我认为问题在于:当您从空闲运行时,
sys.argv[0]
保存脚本的整个路径,因此
os.path.dirname()
正确提取dirname。但是当您从命令行运行时,
sys.argv[0]
只保存脚本名,比如
example.py
,而不是path,因此
os.path.dirname()
返回一个空字符串,反过来,当馈送到
walk
时,它不会给出任何有意义的内容

编辑


如何修复:使用
os.path.abspath(sys.argv[0])
获取脚本的完整路径,而不是单独使用
sys.argv[0]
。然后
os.path.dirname()
应用到它将为您提供目录名,并在空闲和命令行上工作。

我认为问题在于:当您从空闲运行时,sys.argv[0]保存脚本的整个路径,因此
os.path.dirname()
正确提取目录名。但是当您从命令行运行时,
sys.argv[0]
只保存脚本名,比如
example.py
,而不是path,因此
os.path.dirname()
返回一个空字符串,反过来,当馈送到
walk
时,它不会给出任何有意义的内容

编辑



如何修复:使用
os.path.abspath(sys.argv[0])
获取脚本的完整路径,而不是单独使用
sys.argv[0]
。然后将
os.path.dirname()
?你在做
python example.py文件夹
?还有,为什么你有一个
except
语句,为什么它是sys.argv[0]@DavidRobinson的最后一行?检查sys.argv[0]@DavidRobinson的值:我将命令行移到包含文件的文件夹,然后“python example.py”except块有一些异常,我没有把它放出来,因为它们与问题无关。您使用什么命令从命令行调用它?你在做
python example.py文件夹
?还有,为什么你有一个
except
语句,为什么它是sys.argv[0]@DavidRobinson的最后一行?检查sys.argv[0]@DavidRobinson的值:我将命令行移到包含文件的文件夹,然后“python example.py”except块有一些异常,我没有把它贴出来,因为它们不属于problem@martineau-那里!我提出了一个解决办法;-)您的修复使它在空闲和命令行中都能工作,所以我按照承诺投了赞成票。但是,当从命令行运行sys.argv[0]时,您对它的内容所说的是错误的——它是空的,而不是脚本的名称。您的修复仍然有效,因为
os.path.abspath(“”)
返回当前目录。@martineau-首先,感谢您遵守承诺。第二,这是我第一次遇到鼓励人们改进以帮助他人的人,我印象深刻。我相信你在某个时候做了一个很好的软件经理。最后,关于这个代码,我没有完全理解你所说的。我认为您的意思是,这与Python了解当前目录有关,而不是与
path
处理有关。因此,我相信不用使用
os.path.dirname()
,只需执行
os.getcwd()
,就足够了。我最初的观点是,虽然你似乎在告诉OP出了什么问题,这“至少”是他们想要的,但他们真正想要的是一个解决方案——这意味着可以在空闲状态下工作,也可以在命令行中工作。在你添加编辑后,我决定在投票前检查一下它是否真的有效。在做这件事的时候,我注意到你所说的错误并不完全正确。然而,正如我也提到的,您的编辑中的解决方案仍然有效。我猜这里的教训是在发布之前总是测试代码。@martineau-好了!我提出了一个解决办法;-)您的修复使它在空闲和命令行中都能工作,所以我按照承诺投了赞成票。但是,当从命令行运行sys.argv[0]时,您对它的内容所说的是错误的——它是空的,而不是脚本的名称。你的修理工作