Τα πάντα για το Bash...

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 07 Οκτ 2011, 22:18

Κώδικας: Επιλογή όλων
python -c 'tes.py chris'

Τι προσπαθείς να κάνεις με αυτό;
Να καλέσεις την συνάρτηση chris();
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό clepto » 07 Οκτ 2011, 22:28

ναι
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 07 Οκτ 2011, 22:30

Είναι λογικό που παίρνεις σφάλμα.
Η python -c περιμένει να δώσεις σαν string αυτό που θες να εκτελεστεί. Πχ:
Κώδικας: Επιλογή όλων
python -c "print('hello')"

Δεν γίνεται να περάσεις ολόκληρο το πρόγραμμα σαν string.
Διαβάζοντας:
Κώδικας: Επιλογή όλων
python -c 'tes.py'

Νομίζει ότι αυτό (το tes.py δηλαδή) είναι εντολή python και βγάζει σφάλμα καθώς δεν υπάρχει τέτοια εντολή.

Γιατί δεν δοκιμάζεις να το εκτελέσεις κανονικά με /fulpath/tes.py μέσα στο bash;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό clepto » 07 Οκτ 2011, 22:32

θέλω να εκτελέσω συγκεκριμένες συναρτήσεις από τον κώδικα που μου έχει δώσει, λες να το εκτελώ κανονικά;
θα το δοκιμάσω...είναι τόσο απλό και δεν το είχα σκεφτεί...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 07 Οκτ 2011, 22:40

clepto έγραψε:θέλω να εκτελέσω συγκεκριμένες συναρτήσεις από τον κώδικα που μου έχει δώσει, λες να το εκτελώ κανονικά;
θα το δοκιμάσω...είναι τόσο απλό και δεν το είχα σκεφτεί...

Μπορείς να εκτελέσεις και συγκεκριμένες συναρτήσεις.

Ένας τρόπος που μου έρχεται στο μυαλό (δεν ξέρω αν είναι ο "καλύτερος") είναι να περνάς και ένα όρισμα μαζί με το πρόγραμμα σου.
Στην python υπάρχει η μεταβλητή sys.argv η οποία επιστρέφει σε μια λίστα τα ορίσματα που περνάει κάποιος όταν εκτελεί το πρόγραμμα.
Έτσι ας πούμε αν μέσα στον κώδικα σου έχεις:
Κώδικας: Επιλογή όλων
import sys

def func():
print('ok')

for i in sys.argv:
i == 'sinartisi':
func()

Και εκτελέσεις το πρόγραμμα σου απ' τον bash σαν "tes.py sinartisi' η έξοδος θα είναι 'οκ'. :)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό clepto » 07 Οκτ 2011, 23:11

αν τα τρέχω με το full path πως μπορώ να εκτελέσω μια συγκεκριμένη συνάρτηση που θέλω;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 07 Οκτ 2011, 23:37

clepto έγραψε:αν τα τρέχω με το full path πως μπορώ να εκτελέσω μια συγκεκριμένη συνάρτηση που θέλω;

διάβασες τον κώδικα;

Για να καταλάβεις πως δουλεύει η sys.argv πάρε το παρακάτω παράδειγμα.
Δημιούργησε ένα αρχείο που περιέχει τον κώδικα:
Κώδικας: Επιλογή όλων
#!/usr/bin/python3
import sys

for i in sys.argv:
print(i)

Έστω ότι το όνομα του αρχείου είναι "file.py"
Αν το εκτελέσεις από το τερματικό απλά σαν "file.py" η έξοδος θα είναι: file.py
Αν το εκτελέσεις σαν "file.py we are arguments" η έξοδος θα είναι:
Κώδικας: Επιλογή όλων
file.py
we
are
arguments


Έτσι στον κώδικα που σου έδειξα παραπάνω θα περνάς ένα όρισμα στην εκτέλεση του προγράμματος και ανάλογα με το όρισμα θα εκτελείτε η συνάρτηση που θα επιλέξεις.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό clepto » 07 Οκτ 2011, 23:47

αααα...δηλαδή πρέπει να προσθέσω ένα παρόμοιο κομμάτι κώδικα με το παραπάνω στο αρχείο python και μετά θα καλώ τις συναρτήσεις...
θα το δοκιμάσω αύριο...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό Ilias95 » 08 Οκτ 2011, 13:04

clepto έγραψε:ααα...δηλαδή πρέπει να προσθέσω ένα παρόμοιο κομμάτι κώδικα με το παραπάνω στο αρχείο python και μετά θα καλώ τις συναρτήσεις...
θα το δοκιμάσω αύριο...

Ένας άλλος τρόπος, ίσως καλύτερος είναι αυτός:
Έχοντας ένα αρχείο tes.py έτσι:
Κώδικας: Επιλογή όλων
def func():
print('ok')

Εκτελείς απ' τον bash:
Κώδικας: Επιλογή όλων
python -c 'import tes ; tes.func()'

Και η έξοδος είναι 'οκ'.

Προϋπόθεση να βρίσκετε το tes.py εκεί όπου είναι και το αρχείο bash ώστε να γίνει το import.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για το Bash...

Δημοσίευσηαπό clepto » 08 Οκτ 2011, 13:25

έτσι δουλεύει, το είχα δοκιμάσεις και εγώ αυτό, στο περίπου :P
είχα γράψει
Κώδικας: Επιλογή όλων
python -c 'import tes ; func()'
και δεν έπιανε...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι