2012-10-08 7 views
5

que tiene la siguiente secuencia de comandos de Python dentro de un directorio llamado 'test' en mi escritorio Linux:El funcionamiento de un pitón de secuencias de comandos dentro de otro directorio

#!/usr/bin/python 

f = open('test.txt','w') 
f.write('testing the script') 

Así que es /Home/Desktop/test/script.py

Si voy dentro del directorio y el tipo ./script.py funciona bien y crea el archivo test.txt.

Sin embargo, por alguna razón, no puedo ejecutar el script desde el Escritorio (/Home/Desktop). Intenté ./test/script.py, por ejemplo, pero no funcionó.

Los permisos de archivo en el script son 755, y en el directorio 777.

Cualquier ayuda sería apreciada.

+0

¿Podría proporcionar el mensaje de error que está viendo en la consola? – ernie

+0

No hay mensaje de error, así que supongo que el script se está ejecutando pero no puede crear el archivo. –

+0

Si no pudo crear el archivo, debería arrojar un error de E/S. Supongo que está creando el archivo, simplemente no donde lo esperas. Además, como mencioné en mi respuesta, el modo 'w' trunca el archivo, por lo que no verá ningún cambio si el archivo existe (excepto el tiempo modificado). – ernie

Respuesta

13

Usted puede utilizar os.path.dirname() y __file__ para obtener rutas absolutas como esto:.

#!/usr/bin/python 

import os # We need this module 

# Get path of the current dir, then use it to create paths: 
CURRENT_DIR = os.path.dirname(__file__) 
file_path = os.path.join(CURRENT_DIR, 'test.txt') 

# Then work using the absolute paths: 
f = open(file_path,'w') 
f.write('testing the script') 

De esta manera, la secuencia de comandos funcionará en los archivos ubicados solo en el mismo directorio como la secuencia de comandos, independientemente del lugar desde el que la ejecute.

+0

Funcionó como un amuleto. Muchas gracias hombre. Supongo que sin ese cambio se estaba ejecutando el script, pero no fue capaz de crear el archivo porque estaba intentando colocarlo en/Desktop en lugar de/Desktop/test, ¿correcto? –

+0

@DanielS: ¡Exactamente! :) Estoy feliz de haber ayudado. – Tadeck

+1

Muchas gracias. –

0

"Y así sucesivamente" no significa mucho.

¿En qué parte del sistema de archivos está usted? ¿Cuál es la posición relativa de los directorios de prueba a su ubicación?

¿Has probado una ruta totalmente calificada? por ejemplo,

/home/daniel/test/script.py 
+0

Estoy en el escritorio, y el directorio 'prueba' está dentro de él. Edité la pregunta para contener esta información. Gracias –

1

En su open('test.txt', 'w') poner open(r'./test.txt', 'w'). Cuando se ejecuta, el uso "pitón script.py ver si funciona

+0

¿Quiere decir usar python ./test/script.py? Porque, como dije, estoy intentando ejecutar el script desde fuera de su directorio. –

+0

Sí. Pensé que podrías generalizar los parámetros para el ejecutable 'python'. – alvonellos

+0

Gotcha. ¿También quiere decir abierto (r './test.txt', 'w') o abierto ('./test.txt', 'w'), sin la 'r'). –

0

qué directorio está ejecutando en puede intentar utilizar:..?

import os 

print os.getcwd() 

para verificar que el directorio de trabajo es lo que creo que es

1

Si su cwd es /Desktop/test, y luego intenta ejecutar ./test/script.py, está intentando ejecutar un script en /Desktop/test/test/script.py. Lo más probable es que solo quisiera hacer ./script.py.

Como acotación al margen, su pregunta habría sido más útil si se hubiera proporcionado el mensaje de error que recibió de la línea de comandos, en lugar de decir "no funcionó"

Si el script se está ejecutando y nada se repite en la consola, lo más probable es que esté funcionando. Tenga en cuenta que opening a file in 'w' mode truncates the file. ¿Tal vez quieres usar un +?

+0

No hay ningún mensaje de error, que ahora me doy cuenta que debe significar que el script se está ejecutando, pero el archivo no se está abriendo/creando, ¿verdad? –

+0

@DanielS parece que vale la pena poner una declaración impresa solo para un control de cordura. . .does test.txt existe y ¿cuáles son sus permisos? – ernie

+0

Exploraré más para ver si descubro lo que está pasando. –

Cuestiones relacionadas