Mam folder o nazwie test-folder z dwoma plikami.

# file name: demo.py
print('hello world')
# file name: script.sh
python3.7 demo.py

test-folder jest obecny w /home/username/Documents/

Wyeksportowałem powyższą ścieżkę do .bashrc.

Teraz, gdy próbuję wykonać skrypt script.sh za pomocą następującego polecenia,

bash script.sh

Otrzymuję następujący błąd

python3.7: can't open file 'demo.py': [Errno 2] No such file or directory

Jak mogę to rozwiązać? Jestem na Ubuntu 18.04

0
Ravgeet Dhillon 15 grudzień 2019, 17:38
Najważniejsze jest to, że chcę mieć możliwość uruchomienia script.sh z dowolnego miejsca.
 – 
Ravgeet Dhillon
15 grudzień 2019, 20:11

4 odpowiedzi

Przejdź do folderu zawierającego plik: $ cd /home/username/Documents/test-folder

Po upewnieniu się, że jesteś w folderze zawierającym plik spróbuj:

$ python file_name.py

Jeśli to nie zadziała, wypróbuj pełną ścieżkę do Pythona i pełną ścieżkę do pliku w następujący sposób:

$ /usr/lib/python3.7 /home/username/Documents/test-folder/file_name.py

0
Yehdhih ANNA 15 grudzień 2019, 17:50
Sprawdź mój komentarz do odpowiedzi @kent-shikama.
 – 
Ravgeet Dhillon
15 grudzień 2019, 20:10
Ach, teraz to widzę, w takim przypadku użyj pełnej ścieżki zarówno do Pythona, jak i do twojego pliku, tak jak stwierdziłem w drugiej połowie mojej odpowiedzi, powinno działać. # file name: script.sh /usr/lib/python3.7 /home/username/Documents/test-folder/demo.py
 – 
Yehdhih ANNA
15 grudzień 2019, 20:14

Jeśli chcesz używać script.sh z dowolnego miejsca, Twoje podejście nie zadziała. Podczas wykonywania $ bash script.sh plik script.sh powinien znajdować się w katalogu roboczym.

Aby rozwiązać ten problem, możesz użyć ścieżek bezwzględnych:

# filename: script.sh

python3.7  /home/username/Documents/test-folder/demo.py

Spróbuj wykonać to za pomocą bash /home/username/Documents/test-folder/script.py.

Możesz osiągnąć swój cel w prawdopodobnie prostszy sposób, dodając /home/username/Documents/test-folder do swojego PATH, dodając shebang do demo.py i tworząc demo.sh wykonywalny.

$ export PATH=/home/username/Documents/test-folder:$PATH
$ chmod +x /home/username/Documents/test-folder/demo.py

demo.sh będzie wyglądać tak z hukiem:

#!/usr/lib/python3.7

print('hello world')

I może być wykonywane z dowolnego miejsca za pomocą $ demo.sh.

0
juri_d 15 grudzień 2019, 20:30

Mi to pasuje. Czy jest coś w Twojej konfiguracji, która różni się od mojej?

$ cat demo.py 
print("Hello World")

$ cat script.sh 
python3.7 demo.py

$ tree
.
└── test-folder
    ├── demo.py
    └── script.sh

1 directory, 2 files

$ cd test-folder/
$ bash script.sh 
Hello World

Edycja: spróbuj wykonać następujące czynności.

$ cat script.sh
python3.7 "`dirname "$0"`/demo.py"
0
Kent Shikama 16 grudzień 2019, 05:11
Dzięki za to, ale jest problem. Nie uruchomiłeś skryptu z innej lokalizacji. To, czego chcę, to dodać powyższy folder testowy do zmiennej path i móc wykonać skrypt z dowolnego miejsca.
 – 
Ravgeet Dhillon
15 grudzień 2019, 20:08

Jeśli Twój plik script.sh istnieje tylko do uruchomienia skryptu Pythona, nie jest potrzebny. Zamiast tego spraw, aby sam skrypt w Pythonie był wykonywalny.

(1) dodaj to jako pierwszą linię w pliku Pythona - to mówi Unixowi, którego interpretera użyć podczas uruchamiania tego pliku:

#!/usr/bin/env python37

(2) uczyń plik Pythona wykonywalnym, aby można go było uruchomić bezpośrednio:

chmod +x demo.py

(3) umieść ten plik na ścieżce, np. ścieżkę ustawioną w pliku konfiguracyjnym Bash lub taką, która jest już na ścieżce, na przykład /usr/local/bin.

Teraz za każdym razem, gdy wydasz polecenie demo.py, Twój skrypt zostanie uruchomiony. Pamiętaj, że rozszerzenie .py nie jest wymagane - możesz dowolnie nazwać plik.

0
Chris Johnson 16 grudzień 2019, 05:56