我想从 Hamilton C shell 运行 Python 脚本,而不必指定脚本的整个路径。
我尝试的第一件事是将脚本文件夹添加到 Windows 中的 PATH 环境变量中。这可行,但 C shell 无法自动执行 .py 文件,因此我必须在脚本名称前使用“python”。
现在的问题是,由于我的脚本文件夹不是 Python 路径,因此 Python 可执行文件无法识别它。所以这也不起作用。
我还尝试将我的文件夹添加到“PYTHONPATH”环境变量(我必须创建),但这也不起作用。
有没有一种方法可以让我通过简单地调用其名称(myscript.py)或“python myscript.py”来运行我的脚本?
答案1
仅使用脚本名称从 Windows 命令行运行 Python 脚本
有没有什么方法可以通过简单地调用其名称(myscript.py)或“python myscript.py”来运行我的脚本?
当然,你可以在 Windows 中毫无问题地做到这一点。我按照以下步骤进行了测试,并确认它在 Windows 10 上确实可以正常工作。
配置 Windows 文件关联指针
将 python.exe 的完整显式路径设置为系统上的正确值,如下面 #3 所示
- 以管理员身份打开提升的 [cmd.exe] 命令提示符
- 输入
ASSOC .py=PythonScript
并按Enter - 输入
FTYPE PythonScript="C:\Program Files\Python\python.exe" "%1" %*
并按Enter - 输入
SET PATHEXT=.py;%PATHEXT%
并按Enter
确认并测试 Windows 文件关联指针
现在,您可以从命令提示符中简单地输入 Python 脚本的完整路径,然后按Enter,Python 逻辑就会相应地运行。
您可以选择只输入完整路径(不带.py
文件扩展名)。您也可以只CD
输入 Python 脚本所在的目录,然后输入脚本名称(带或不带扩展名)并按Enter,Python 就会相应地运行脚本逻辑。
来自 CMD 的示例(发布上述更改)
"C:\ScriptPath\scriptname.py"
并按Enter"C:\ScriptPath\scriptname"
并按EnterCD /D "C:\ScriptPath\scriptname.py"
并按EnterCD /D "C:\ScriptPath\scriptname.py"
并按Enter
仅使用脚本名称从 Shell 执行
如果您确实需要从命令行运行脚本而不告诉 shell python 脚本文件的完整明确路径,那么您需要将该脚本所在的路径添加到%PATH%
环境变量中。
- 以管理员身份打开提升的 [cmd.exe] 命令提示符
- 输入
SET PATH=%PATH%;C:\Program Files\Python
其中 是C:\Program Files\Python
您的系统中存在的值。
现在您只需输入带有或不带有文件扩展名的脚本名称,而无需转到CD
另一个目录或明确指定 python 脚本的完整路径。
更多资源
FTYPE /?
Displays or modifies file types used in file extension associations FTYPE [fileType[=[openCommandString]]] fileType Specifies the file type to examine or change openCommandString Specifies the open command to use when launching files of this type. Type FTYPE without parameters to display the current file types that have open command strings defined. FTYPE is invoked with just a file type, it displays the current open command string for that file type. Specify nothing for the open command string and the FTYPE command will delete the open command string for the file type. Within an open command string %0 or %1 are substituted with the file name being launched through the assocation. %* gets all the parameters and %2 gets the 1st parameter, %3 the second, etc. %~n gets all the remaining parameters starting with the nth parameter, where n may be between 2 and 9, inclusive. For example: ASSOC .pl=PerlScript FTYPE PerlScript=perl.exe %1 %* would allow you to invoke a Perl script as follows: script.pl 1 2 3 If you want to eliminate the need to type the extensions, then do the following: set PATHEXT=.pl;%PATHEXT% and the script could be invoked as follows: script 1 2 3
ASSOC /?
Displays or modifies file extension associations ASSOC [.ext[=[fileType]]] .ext Specifies the file extension to associate the file type with fileType Specifies the file type to associate with the file extension Type ASSOC without parameters to display the current file associations. If ASSOC is invoked with just a file extension, it displays the current file association for that file extension. Specify nothing for the file type and the command will delete the association for the file extension.
答案2
我是汉密尔顿C壳. 听起来你使用 Cygwin 和我的 C shell当您尝试使用 python 时出现以下错误:
1 C% python
csh(C:\cygwin64\bin\python line 1): Couldn't open 'symlink' as a redirected standard input.
> in C:\cygwin64\bin\python
< called from line 1
问题是 Cygwin python 命令是 Cygwin 独有的符号链接文件,而不是实际的可执行文件。它们是仅受 Cygwin 支持。(您可能已经注意到 cmd.exe 也无法运行它。)其中的内容如下:
2 C% whereis python
C:\cygwin64\bin\python
3 C% cat `!!`
cat `whereis python`
!<symlink>python2.7.exe
由于无法将其识别为其他内容,C shell 尝试将其解释为脚本,并认为它识别为!<
C shell输入/输出重定向操作符但找不到名为 的文件symlink
,因此出现错误消息。
但考虑到该文件所做的只是将你重定向到实际的可执行文件,你可以使用 C shell 别名执行相同的操作,你可以将其保存在你的启动文件文件:
4 C% alias python python2.7
5 C% python
Python 2.7.10 (default, Jun 1 2015, 18:05:38)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
6 C% cd desktop
7 C% cat MyScript.py
print("Hello")
8 C% python MyScript.py
Hello
如果你想直接从 C shell 运行 Python 脚本,而不必输入 Python 命令,C shell 支持常见的#!
句法告诉它使用 Python 解释器。但请注意,它仍然需要实际可执行文件的名称。以下是示例:
9 C% cat MyScript2.py
#!python2.7
print("Hello")
10 C% MyScript2.py
Hello
11 C%
答案3
MyScript.py
假设您在给定目录下有一个名为的 Python 脚本:
print("Hello")
你可以找出 Python 在你的系统上的位置:
$ which python /usr/bin/python
在 的开头添加以下shebang MyScript.py
,你的脚本将轻松找到 Python 解释器,并且你将能够执行它而无需先调用 Python:
#!/usr/bin/python
print("Hello")
$ ./MyScript.py Hello
(此时您可能还想删除扩展.py
。)
如果您不在包含 的同一目录下MyScript.py
,则需要告诉 shell 在哪里找到它。这可以通过将路径添加到 PATH 环境变量中来完成,如下所示:
$ setenv PATH <path to my script>:$PATH
或者
$ setenv PATH $PATH:<path to my script>
现在MyScript.py
可以从任何地方执行。
如果您想使其永久存在,您可以将此行添加到您的.cshrc,.login 或类似文件中。