Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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
通过Windows命令行运行Python脚本_Python_Windows_Shell_Command Line_Scripting - Fatal编程技术网

通过Windows命令行运行Python脚本

通过Windows命令行运行Python脚本,python,windows,shell,command-line,scripting,Python,Windows,Shell,Command Line,Scripting,我刚刚开始使用Mark Luts的learning Python学习Python。在他的书中,他提供了一个通过Windowsshell调用的简单脚本的示例。在该示例中,他调用如下所示: C:\code> python script1.py 我已经修改了我机器上的环境变量,这样我就可以调用 C:\User\Example> python 打开口译员,我也可以打电话给 C:\User\Example> script1 运行我编写并放置在所需目录中的脚本。我的问题是我不能打电话

我刚刚开始使用Mark Luts的learning Python学习Python。在他的书中,他提供了一个通过Windowsshell调用的简单脚本的示例。在该示例中,他调用如下所示:

C:\code> python script1.py
我已经修改了我机器上的环境变量,这样我就可以调用

C:\User\Example> python
打开口译员,我也可以打电话给

C:\User\Example> script1
运行我编写并放置在所需目录中的脚本。我的问题是我不能打电话

C:\User\Example> python script1.py
在我的命令行中,就像他在书中一样。他提到了一个PYTHONPATH环境变量,但是,这个变量在我的机器上不存在。我只有“路径”、“临时”和“TMP”。特别是,当我试图打这样一个电话时,我会出错

python: can't open file 'script1.py': [Errno 2] No such file or directory

要使这类命令在命令行上正常工作,我必须做些什么?

您正在从
C:\User\Example
的上下文中调用
python
,并向其传递要通过intepreter运行的文件名(
script1.py
)。很明显,
PATH
变量设置正确,因此您可以从计算机上的任何位置调用
python
,因为我们可以看到它正在运行,但实际上无法找到您的脚本

但是,您在评论中指出,您的脚本实际上位于
C:\User\Example\my\u scripts
中。换句话说,您正在传递
python
一个不存在的文件名!!(至少来自
C:\User\Example
的上下文)

您需要位于脚本的目录中,以便
python
可执行文件能够找到它

或者,您可以运行python命令,并向其提供有关脚本位置的更多信息。例如,如果您是在
C:\User\Example
的上下文中运行,并且您的脚本位于本书(第44页,第4版)的
C:\User\Example\my\u scripts
,则可以运行
python.\my\u scripts\script1.py

最后,如果脚本位于与您工作所在目录不同的目录中,请记住提供脚本的完整路径

对于您的情况,这意味着使用

C:\User\Example> python C:\User\Example\my_scripts\script1.py
您可以编写一个批处理文件,在预定义目录中查找脚本:

@echo off
setlocal
PATH=C:\User\Example\Python36;%PATH%
SCRIPT_DIR=C:\User\Example\my_scripts
python %SCRIPT_DIR\%*

听起来像是
script1.py
C:\User\Example
目录中不存在的问题,因为
PATH
变量似乎设置为可以从命令行调用
python
(因为您可以这样做)。您是否验证了您正在脚本所在的同一目录中运行
python
命令?@wheeler我将python脚本和python解释器存储在两个不同的位置,它们都不是C:\User\Example目录。我已经编辑了我的PATH变量,以包括到保存解释器的目录和保存脚本的目录的文件路径。例如,我的Python解释器位于C:\User\example\Python36目录下,我的脚本位于C:\User\example\my\u scripts目录下。
它们都不是C:\User\example目录
这是您的答案。您正在从该目录调用python,并为其提供当前所在目录中不存在的文件名。因为它只是文件名,所以它必须存在于您当前所在的文件夹中,命令才能工作。换句话说,为了运行
python script1.py
,您必须使用
cd
实用程序导航到
my_scripts
目录。因此,是否无法在python解释器中创建环境变量,以便我能够拥有“默认值”除了C:\User\Example(例如C:\User\Example\my_脚本)之外,我的脚本的位置,以便我能够进行诸如“C:\User\Example>pythonScript1.py”之类的调用?正如我在最初的帖子中所说,我的书中提到了一个PYTHONPATH变量,它的功能似乎与我所描述的类似。没错,没有办法做到这一点。PYTHONPATH的工作方式与书中描述的不同。它用于导入模块,而不是执行模块。看一看描述了几乎相同情况的问答,这是供进一步阅读的参考手册。你在用什么书?我在用Mark Lutz的《学习Python》。也许我误解了正在发生的事情。我会去复查的。看来我误读了,被怀疑了。感谢您澄清这一点。正确安装的Python 3.6应将.py[w]文件与py.exe启动器关联,并传递命令行参数。py启动器根据脚本的shebang行处理运行多个版本的Python。将
C:\User\Example\my_scripts
添加到
PATH
中,并将
.PY
添加到
PATHEXT
。然后直接运行
script1