Pergunta

Eu tenho muitos diretórios com arquivos de texto escritos usando (g) vim, e eu ter escrito um punhado de utilitários que eu acho útil em Python. I começar os utilitários com uma linha pitão libra-bang- / usr / bin / env, a fim de utilizar o Python que é instalado sob cygwin. Gostaria de digitar comandos como este:

% cd ~ / SomeBook

% que pythonUtil

/ usr / local / bin / pythonUtil

% pythonUtil ./infile.txt ./outfile.txt

(ou% pythonUtil someRelPath / infile.txt somePossiblyDifferentRelPath / outfile.txt)

pythonUtil: Encontrado infile.txt; Escrevendo outfile.txt; Feito (ou algo assim, se alguma coisa)

No entanto, os meus programas pythonUtil continuo dizendo a mim que eles não podem encontrar infile.txt. Se eu copiar o utilitário para o diretório de trabalho atual, tudo está bem, mas então eu tenho cópias de meus utilitários dominam o cenário. O que eu deveria estar fazendo?

Yet Another Edit: Para resumir --- o que eu queria era os.path.abspath ( 'filename'). Que retorna o caminho absoluto como uma string, e então todos ambigüidade foi removida.

MAS: se o Python está sendo utilizado é o instalado sob cygwin, então o caminho absoluto será um caminho CYGWIN-relativa, como /home/someUser/someDir/someFile.txt. Entretanto, se o Python foi instalado no Windows (e é aqui que está sendo chamado de um cygwin comando terminal), então o caminho absoluto será o caminho completo do Windows, a partir de 'drive' em baixo, como D: \ cygwin \ home \ SomeUser \ somedir \ somefile.txt.

Moral: Não espere que o cygwin Python para gerar um caminho absoluto Windows completo para um arquivo não raiz em /; é além de seu horizonte de eventos. No entanto, você pode chegar a qualquer arquivo em um sistema de WinXP com o cygwin-python se você especificar o caminho do arquivo usando o "/ cygdrive / DRIVELETTER" convenção leadin.

Observação: Não use '\' s para separadores no caminho WinXP na linha de comando cygwin; usar '/' s e confiar a cobra. Não faço ideia porquê, mas alguns separadores pode ser descartado e o caminho pode ser modificado para incluir níveis extras, como "Documents and Settings \ SomeUser" e outras bobagens do Windows.

Graças aos respondedores para me empurrar na direção certa.

Foi útil?

Solução

Olhe para os.getcwd:

Edit: Por caminhos relativos, por favor dê uma olhada no módulo os.path:

Em particular, os.path.join e os.path.normpath. Por exemplo:

import os
print os.path.normpath(os.path.join(os.getcwd(), '../AnotherBook/Chap2.txt'))

Outras dicas

O que acontece quando você digita "ls"? Você vê "infile.txt" listado lá?

os.chdir(my_dir)

ou

os.chdir(os.getcwd())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top