Como executo um script Python de uma shell C sem especificar o caminho inteiro?

2

Eu gostaria de executar um script Python de um shell Hamilton C sem precisar especificar o caminho completo do script.

A primeira coisa que tentei foi adicionar minha pasta de scripts à variável de ambiente PATH no Windows. Isso funcionou, mas o shell C não pode simplesmente executar os arquivos .py automaticamente, então eu tenho que usar "python" antes do nome do script.

Agora, o problema é que, como minha pasta de scripts não é um caminho do Python, ela não é reconhecida pelo executável do Python. Então isso não funciona também.

Eu também tentei adicionar minha pasta à variável de ambiente "PYTHONPATH" (que eu tinha que criar), mas isso não funciona.

Existe uma maneira de executar meu script simplesmente chamando seu nome (myscript.py) ou "python myscript.py"?

    
por Djeezus 12.08.2016 / 17:35

3 respostas

1

Sou o autor do shell Hamilton C . Parece que você está usando o Cygwin com meu shell C e obtendo o seguinte erro ao tentar usar 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

O problema é que o comando pygwin python é um arquivo de link simbólico apenas do Cygwin, em vez de um executável real. Eles são suportados somente pelo Cygwin . (Você deve ter notado que o cmd.exe também não o executa.) Aqui está o que está nele:

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

Não sendo capaz de reconhecê-lo como qualquer outra coisa, o shell C tentou interpretá-lo como um script, pois ele reconheceu um shell !< C operador de redirecionamento de i / o mas não conseguiu encontrar um arquivo chamado symlink , daí a mensagem de erro.

Mas, dado que tudo o que o arquivo está fazendo está redirecionando você para o executável real, você pode fazer a mesma coisa com um alias do shell C que você pode salvar em seu startup.csh file:

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

Se você gostaria de executar seus scripts python diretamente do shell C sem ter que digitar o comando python, o shell C suporta o common #! syntax para dizer a ele para usar o interpretador python. Mas perceba que ainda precisa do nome do executável real. Aqui está um exemplo:

9 C% cat MyScript2.py
#!python2.7
print("Hello")
10 C% MyScript2.py
Hello
11 C%
    
por 22.08.2016 / 01:13
1

Execute scripts Python a partir da linha de comando do Windows apenas com o nome do script

Is there any way that I can run my script by either simply calling its name (myscript.py) or "python myscript.py"?

Absolutamente, você pode fazer isso no Windows sem problemas. Eu testei isso e confirmou que funciona como esperado com o Windows 10, na verdade, seguindo os passos abaixo.

Configurar ponteiros de associação de arquivos do Windows

Set the python.exe full explicit path as in the below #3 for the correct value where this is on your system

  1. Abra um prompt de comando elevado [cmd.exe] como administrador
  2. Digite ASSOC .py=PythonScript e pressione Digite
  3. Digite FTYPE PythonScript="C:\Program Files\Python\python.exe" "%1" %* e pressione Digite
  4. Digite SET PATHEXT=.py;%PATHEXT% e pressione Digite

Confirme e teste os ponteiros de associação de arquivos do Windows

Agora, a partir de um prompt de comando, você pode simplesmente digitar o caminho completo para um script python e então pressionar Enter , e a lógica python deve ser executada adequadamente.

Você pode, opcionalmente, digitar o caminho completo menos a extensão de arquivo .py . Você poderia também apenas CD para o diretório onde um script python está localizado e, em seguida, digitar o nome do script (com ou sem a extensão) e pressionar Enter e python deve executar a lógica do script de acordo.

Exemplos do CMD (post acima das alterações)

  • "C:\ScriptPath\scriptname.py" e pressione Digite
  • "C:\ScriptPath\scriptname" e pressione Digite
  • CD /D "C:\ScriptPath\scriptname.py" e pressione Digite
  • CD /D "C:\ScriptPath\scriptname.py" e pressione Digite

Executar a partir do Shell apenas com o nome do script

Se você realmente precisar executar o script a partir da linha de comando sem informar ao shell o caminho explícito completo para o arquivo de script python, será necessário adicionar o caminho em que esse script reside para a variável %PATH% .

  1. Abra um prompt de comando elevado [cmd.exe] como administrador
  2. Digite SET PATH=%PATH%;C:\Program Files\Python em que C:\Program Files\Python é o valor em que isso existe no seu sistema.

Agora, basta digitar o nome do script com ou sem a extensão do arquivo sem fazer CD em outro diretório ou especificar explicitamente o caminho completo para o script python.

Mais recursos

  • Variáveis de ambiente do 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.
    
por 22.08.2016 / 09:10
0

Digamos que você tenha um script Python chamado MyScript.py em um determinado diretório:

print("Hello")

Você pode descobrir onde o Python está no seu sistema:

$ which python /usr/bin/python

Adicionando o seguinte shebang no início de MyScript.py , seu script encontrará facilmente o interpretador Python, e você poderá executá-lo sem chamar primeiro o Python:

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

$ ./MyScript.py Hello

(Neste ponto, você também pode querer descartar a extensão .py .)

Se você não estiver sob o mesmo diretório que contém MyScript.py , será necessário informar ao shell onde encontrá-lo. Isso pode ser feito adicionando o caminho à sua variável de ambiente PATH da seguinte forma:

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

ou

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

Agora, MyScript.py pode ser executado de qualquer lugar.

Se você quiser torná-lo permanente, você pode adicionar esta linha ao arquivo .cshrc, .login ou similar.

    
por 15.08.2016 / 12:52