Erkennen welches bash skript ausgeführt wurde?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

Ich habe 6 unterschiedliche Scripte welche folgendermassen aufgebaut sind:

Code: Alles auswählen

def func()
with  open("file_A", "r") as infile, open("file_1.txt", 'w') as outfile_1, open("file_2.txt", 'w') as outfile_2, open("file_3.txt", 'w') as outfile_2:

	#  hier ist ein Stück Code welcher nach String_XXX in file_A sucht und diese Zeile in file_1.txt schreibt
			as outfile_1.write(line)
		
	#  hier ist ein Stück Code welcher nach String_ZZZ in file_A sucht und diese Zeile in file_2.txt schreibt
			as outfile_2.write(line)
		
	#  hier ist ein Stück Code welcher nach String_YYY in file_A sucht und diese Zeile in file_3.txt schreibt
			as outfile_3.write(line)

Die Übrigen Skripte machen das gleiche, unterschied ist das diese nur aus anderen Dateien lesen (file_B,file_C...) und schreiben die entsprechenden Inhalte wieder in die
3 output files (file_1.txt, file_2.txt, file_1.txt) welche dann überschrieben werden. Zudem wird nach dem selben Inhalt (String_XXX,String_ZZZ,String_YYY) in allen Dateien gesucht.

Die Logik ist also ganz die gleiche, nur das jedes Skript eine andere Datei liest. Ich möchte das ganze jetzt natürlich in einem Skript haben. Die andere Sache ist,
ich habe wiederum 6 bash files aus denen jeweils das entsprechende python script aufgeruffen wird, also:

bash_1.cmd ruft python_1.py
bash_2-cmd ruft python_2.py
.
.

Dies soll nun so aussehen:

bash_1.cmd ruft python.py
bash_2.cmd ruft python.py
.
.

Je nachdem welches bash file aufgeruffen wird, soll eine entsprechende Datei im python script aufgeruffen werden. Pseudocode mässig würde das so aussehen:

Code: Alles auswählen

If script.py aufgeruffen von bash_script_A dann:
	open ("file_A", "r") as infile, open("file_1.txt", 'w') as outfile_1, open("file_2.txt", 'w') as outfile_2, open("file_3.txt", 'w') as outfile_2:
		# Code code
			as outfile_1.write(line)
		
		# Code code
			as outfile_2.write(line)
		
		# Code code
			as outfile_3.write(line)

Code: Alles auswählen

elif aufgeruffen von bash_script_B dann: 
open ("file_B", "r") as infile, open("file_1.txt", 'w') as outfile_1, open("file_2.txt", 'w') as outfile_2, open("file_3.txt", 'w') as outfile_2:
		# Code code
			as outfile_1.write(line)
		
		# Code code
			as outfile_2.write(line)
		
		# Code code
			as outfile_3.write(line) 

Wie könnte man so etwas am besten realisieren? Den namen des bash skript als Funktionsparameter verwenden?

Bin dankbar für Tipps!
Zuletzt geändert von milexy86 am Freitag 21. Februar 2014, 14:24, insgesamt 2-mal geändert.
BlackJack

@milexy86: Das sieht alles ein wenig redundant aus.

Wenn ein Programm verschiedene Sachen machen kann und der Aufrufer entscheiden können soll welche Sache davon gemacht werden soll, dann verwendet man dafür in der Regel Argumente die dem Programm beim Aufruf auf der Kommandozeile übergeben werden. Was ich so zwischen den Zeilen rauslese, dass Du gerne den Namen des Programms herausfinden möchtest von dem das Python-Programm aufgerufen wurde, um dann entsprechend jeweils das passende zu machen ist extrem magisch und auch unpraktisch.

Die Argumente stehen in `sys.argv` und in der Standardbibliothek gibt es das Modul `argparse` die dabei hilft das Auszuwerten und die von anderen Programmen gewohnte API für Argumente und Optionen anzubieten.
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

@BlackJack : Genau darum geht es. Das python script soll wisen von welchem programm es aufgeruffen wurde um dann den entsprechenden code auszuführen. In meinem Fall also eine entsprechene Datei im python script aufzuruffen. Danke für den Vorschlag mit sys.argv`. Werde damit jetzt etwas spielen!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack: dass aus dem Namen des Executables die Funktion bestimmt wird, ist bei Unix-Skripten gar nicht so selten.
BlackJack

@Sirius3: Das weiss ich aber darum geht's hier ja nicht, hier geht es nicht um den Namen des *aufgerufenen* Skript sondern um den Namen des *Aufrufers*.
Antworten