2012-12-09 28 views
13

Znalazłem kilka pytań na temat modułu, ale bardziej powszechnym problemem wydaje się być uzyskanie właściwej listy argumentów, którą moim zdaniem udało się (ostatecznie)python subprocess.call() "brak takiego pliku lub katalogu"

próbuję uruchomić program, który oczekuje wejście jak to w wierszu poleceń,

fits2ndf in out 

z „w” bycia filepath pliku do konwersji i „out” jest ścieżka i nazwa pliku do zapisz wynik do.

Więc za pomocą podproces,

subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"]) 

ten podnosi,

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/subprocess.py", line 493, in call 
return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
errread, errwrite) 
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

Ustawianie shell=TRUE (co wiem, to źle) daje ten sam wynik. Nie wiem, czy jest to istotne, ale używam tcsh. Jakieś sugestie?


Edycja w odpowiedzi na pytania

nie mam na stałe ustawić ścieżkę jednak fits2ndf jest częścią pakietu programów, które zainicjować za pomocą

% tcsh 
% setenv STARLINK_DIR /home/tomq/star-kapuahi 
% source $STARLINK_DIR/etc/login 
% source $STARLINK_DIR/etc/cshrc 

i normalnie działa od wewnątrz dowolny katalog bez podania pełnej ścieżki.

+0

jest 'fits2ndf' na swojej drodze? –

+0

Niestety nie bardzo rozumiem twoje pytanie, fits2ndf jest zawarty w innym katalogu, ale działa dobrze w innym miejscu bez pełnej ścieżki, ale nie powinien być częścią ścieżki do pliku .fits. – user1889259

+1

@Karthik odwoływał się do zmiennej środowiskowej PATH. Czy katalog zawierający 'fits2ndf' w $ PATH jest wyeksportowany? – cdarke

Odpowiedz

9

pokaże Ci ścieżkę fits2ndf.

Po tym można napisać podaną pełną ścieżkę do kodu i powinno działać.

Ex:

~$ which mv 
/bin/mv 

Mój kod Python:

import subprocess 

subprocess.call(["/bin/mv","/tmp/a","/tmp/b"]) 
+3

Dzięki temu działało, czy jest tam uzyskanie go, więc nie muszę określać pełną ścieżkę do pasuje2ndf za każdym razem?Idealnie, abym mógł korzystać z dowolnego programu w tym folderze bez ścieżki? Sprawia, że ​​rzeczy są dość nieładne. – user1889259

+1

http://www.troubleshooters.com/linux/prepostpath.htm – denizeren

0

Może chcesz usunąć miejsca w " /media/tom_hdd/Transfer/reference.sdf"

Spróbuj też tp umieścić wszystko w jednym ciągiem, jak "fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"

Upewnij się wskazywać na dokładnym kierunku.

+0

dobre miejsce, dzięki. Niestety pojawiło się tylko podczas pisania tego pytania, a nie w kodzie, więc nic nie zmieniło. – user1889259

+0

edytowałem moją odpowiedź. – Lotzki

Powiązane problemy