2

Я хотел бы запустить скрипт Python из оболочки Hamilton C без указания полного пути скрипта.

Первым делом я попытался добавить папку скриптов в переменную окружения PATH в Windows. Это сработало, но оболочка C не может просто автоматически выполнять файлы .py, поэтому я должен использовать "python" перед именем скрипта.

Теперь проблема в том, что, поскольку моя папка scripts не является путем Python, она не распознается исполняемым файлом Python. Так что это тоже не работает.

Я также попытался добавить свою папку в переменную окружения "PYTHONPATH" (которую мне пришлось создать), но это тоже не работает.

Есть ли способ, которым я могу запустить свой скрипт, просто вызвав его имя (myscript.py) или "python myscript.py"?

3 ответа3

2

Запускать скрипты Python из командной строки Windows только с именем скрипта

Можно ли как-нибудь запустить мой скрипт, просто вызвав его имя (myscript.py) или «python myscript.py»?

Безусловно, вы можете сделать это в Windows без проблем. Я проверил это и подтвердил, что с Windows 10 он работает, как и ожидалось, выполнив следующие действия.


Настройка указателей ассоциации файлов Windows

Задайте полный явный путь к python.exe, как показано ниже # 3, для правильного значения в вашей системе.

  1. Откройте привилегированную командную строку [cmd.exe] с правами администратора.
  2. Введите ASSOC .py=PythonScript и нажмите Enter
  3. Введите FTYPE PythonScript="C:\Program Files\Python\python.exe" "%1" %* и нажмите Enter
  4. Введите SET PATHEXT=.py;%PATHEXT% и нажмите Enter

Подтвердите и протестируйте указатели ассоциации файлов Windows

Теперь из командной строки вы можете просто ввести полный путь к скрипту Python, а затем нажать Enter, и логика Python должна работать соответствующим образом.

При желании вы можете просто ввести полный путь минус расширение файла .py . Вы также можете просто CD в каталог, где находится скрипт python, а затем ввести имя скрипта (с расширением или без него) и нажать Enter, и python должен запустить логику скрипта соответственно.

Примеры из CMD (пост выше изменений)

  • "C:\ScriptPath\scriptname.py" и нажмите Enter
  • "C:\ScriptPath\scriptname" и нажмите Enter
  • CD /D "C:\ScriptPath\scriptname.py" и нажмите Enter
  • CD /D "C:\ScriptPath\scriptname.py" и нажмите Enter

Выполнять только из оболочки с именем скрипта

Если вам действительно нужно запустить скрипт из командной строки, не указав оболочке полный явный путь к файлу скрипта python, то вам нужно добавить путь, где находится этот скрипт, в переменную среды %PATH% .

  1. Откройте привилегированную командную строку [cmd.exe] с правами администратора.
  2. Введите SET PATH=%PATH%;C:\Program Files\Python где C:\Program Files\Python - это значение, где оно существует в вашей системе.

Теперь вы можете просто ввести имя скрипта с расширением файла или без него, не вставляя CD в другой каталог или явно указав полный путь к скрипту python.


Дополнительные ресурсы

  • Переменные среды Windows

  • 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.
    
1

Я являюсь автором оболочки Hamilton C. Похоже, вы используете Cygwin с моей оболочкой C и получаете следующую ошибку при попытке использовать 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

Проблема в том, что команда Python Cygwin - это файл символьных ссылок только для Cygwin, а не фактический исполняемый файл. Они поддерживаются только Cygwin. (Возможно, вы заметили, что cmd.exe тоже не запустится.) Вот что в этом есть:

2 C% whereis python
C:\cygwin64\bin\python
3 C% cat `!!`
cat `whereis python`
!<symlink>python2.7.exe

Не имея возможности распознать его как что-либо еще, оболочка C попыталась интерпретировать его как скрипт, подумав, что он распознал a !< C shell оператор перенаправления ввода / вывода, но не смог найти файл с именем symlink , отсюда и сообщение об ошибке.

Но, учитывая, что все, что делает этот файл - это перенаправляет вас к реальному исполняемому файлу, вы можете сделать то же самое с псевдонимом оболочки C, который вы можете сохранить в файле startup.csh :

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

Если вы хотите запускать свои скрипты python непосредственно из оболочки C без необходимости вводить команду python, оболочка C поддерживает общий #!синтаксис, чтобы сказать ему использовать интерпретатор Python. Но обратите внимание, ему все еще нужно имя фактического исполняемого файла. Вот пример:

9 C% cat MyScript2.py
#!python2.7
print("Hello")
10 C% MyScript2.py
Hello
11 C%
0

Скажем, у вас есть Python-скрипт с именем MyScript.py в данном каталоге:

print("Hello")

Вы можете узнать, где находится Python в вашей системе:

$ which python /usr/bin/python

Добавив следующий заголовок в начале MyScript.py , ваш скрипт легко найдет интерпретатор Python, и вы сможете выполнить его без предварительного вызова Python:

#!/usr/bin/python
print("Hello")

$ ./MyScript.py Hello

(На этом этапе вы также можете удалить расширение .py .)

Если вы не находитесь в том же каталоге, где находится MyScript.py , вам нужно будет указать оболочке, где его найти. Это можно сделать, добавив путь к переменной среды PATH следующим образом:

$ setenv PATH <path to my script>:$PATH

или же

$ setenv PATH $PATH:<path to my script>

Теперь MyScript.py может быть выполнен из любого места.

Если вы хотите сделать это постоянным, вы можете добавить эту строку в ваш .cshrc, .login или подобный файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .