Übergabe von Variablen

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.
RSMVDL

Moin,


Ich würde gerne wissen wie ich z.B. Diesem (was durch php aufgerufen wird) Script hier eine Variable übergebe???:

Code: Alles auswählen

#Temp_Datei anlegen
import shutil
from tempfile import mktemp
#Source in Temp_Datei umwandeln
source_path = input('Path to source files: ')
final_path = mktemp(prefix='tmp_iso_', dir='/media')
shutil.copytree(source_path, final_path)
#Datei editieren
Hier z.B. den Quell-Pfad "source_path = input('Path to source files: ')"

Danke im vorraus
BlackJack

@RSMVDL: Schau Dir mal das `argparse`-Modul an.
RSMVDL

okay ich habe es jetzt gepeilt aber wie kann ich die variablen benenn?

so gehts ja nicht:

Code: Alles auswählen

import sys
ip=(sys.argv[1:ip1])
dns=(sys.argv[2:dns1])
print(ip1 ,"and",dns1)
wenn ich das script so aufrufe:

python3 datei.py ip 192.12 dns 255.255
BlackJack

@RSMVDL: Ganz offensichtlich hast Du es *nicht* gepeilt. Das ist weder das `argparse`-Modul, noch wie Listen funktionieren. Denn das ist `sys.argv`, eine Liste.
RSMVDL

Ja stimmt auch das ich das Modul nicht benutzte gut erkannt! ich will ja auch nur wissen ob die Möglichkeit besteht die variablen die übergeben werden zu benenn und das nicht nur anhand der Reihenfolge 1,2,3,4 etc. festzumachen
RSMVDL

Und warum funkt das jetzt nicht?

Code: Alles auswählen

#Temp_Datei anlegen
import shutil
import string
from tempfile import mktemp
import argparse

#Source in Temp_Datei umwandeln (Paramterübergabe mit --source & --destination)
source_path = argparse.add_argument('--source', type=string)
destination_path = argparse.add_argument('--destination', type=string)
final_path = mktemp(prefix='tmpisosys', dir=destination_path)
shutil.copytree(source_path, final_path)
Fehlermeldung:

Code: Alles auswählen

    source_path = argparse.add_argument(argument='--source', type=string)
AttributeError: 'module' object has no attribute 'add_argument'
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@RSMVDL: Die Dokumentation ist zum Lesen da.
RSMVDL

Mal so ne frage ist das dann nicht nur für python 2.7?
BlackJack

@RSMVDL: Seit Python 2.7 ist es in der Standardbibliothek.
RSMVDL

Hab mich da jetzt nochmals vorgeklemmt und ja ich bin anscheinend zu dumm!
Ich gebe es offen zu ;)

Code: Alles auswählen

#Temp_Datei anlegen
import shutil
import string
from tempfile import mktemp
import parser
import argparse


#Source in Temp_Datei umwandeln (Paramterübergabe mit --source & --destination)
parser = argparse.ArgumentParser(description='Process some integers.')
source_path=parser.add_argument('--source','-s',action="store_true", help='Angabe Quellpfad durch -s oder --source')
destination_path=parser.add_argument('--destination','-d',action="store_true", help='Angabe Zielpfad durch -d --destination')
final_path = mktemp(prefix='tmpisosys', dir=destination_path)
shutil.copytree(source_path, final_path)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

RSMVDL hat geschrieben:Hab mich da jetzt nochmals vorgeklemmt und ja ich bin anscheinend zu dumm!
Du haust da irgendwelchen Code zusammen in der Hoffnung, dass es vielleicht irgendwann laufen wird. So funktioniert Softwareentwicklung nicht. Wenn du anhand der Klassen- und Funktionsdefinitionen nicht weiterkommst, dann suche sauberen Code in dem die gewünschten Elemente eingesetzt werden..

Die Dokumentation zu argparse hat direkt zu Beginn ein Beispiel. Weitere Beispiele folgen weiter unten auf der Seite.

Um einen schnell zusammengehauenen Ansatz zu geben:

Code: Alles auswählen

import argparse

parser = argparse.ArgumentParser(description='Handle stuff.')
parser.add_argument('--source', '-s',
                    action='store',
                    help='Angabe Quellpfad durch -s oder --source')
parser.add_argument('--destination', '-d',
                    action='store',
                    help='Angabe Zielpfad durch -d oder --destination')
args = parser.parse_args()

print(args.source)
print(args.destination)
Zuletzt geändert von /me am Freitag 3. Mai 2013, 11:29, insgesamt 1-mal geändert.
RSMVDL

Danke für den Link dieser bezieht sich auf Python 2.7.4 kann ich das genau so unter 3.3.1 benutzen?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

RSMVDL hat geschrieben:Danke für den Link dieser bezieht sich auf Python 2.7.4 kann ich das genau so unter 3.3.1 benutzen?
Auf der Webseite gibt es oben links in der Ecke eine Combobox mit Versionsnummern. Beim Umschalten auf 3.3 landest du da: http://docs.python.org/3.3/library/argp ... ml#example
RSMVDL

Hab ich bereits gefunden! ;)
Nein kein Plan ich kapier es einfach nicht! Ich will es ja raffen aber kp
Das kann doch nicht so schwer sein den Script 2 Pfade zu übergeben!
Ich verzweifel hier gerade voll.
Ich will nix weiter als das scrip aufrufen in form von

"python datei.py -s pfadquelle -d pfadziel"
Kopieren....
Fertig!
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

RSMVDL hat geschrieben:Das kann doch nicht so schwer sein den Script 2 Pfade zu übergeben!
Hast du mein Beispiel mal ausprobiert?
RSMVDL

Soo mein Gode sieht jetzt so aus

Code: Alles auswählen

import shutil
from tempfile import mktemp
import argparse

parser = argparse.ArgumentParser(description='Handle stuff.')
parser.add_argument('--source', '-s',
                    action='store',
                    help='Angabe Quellpfad durch -s oder --source')
parser.add_argument('--destination', '-d',
                    action='store',
                    help='Angabe Zielpfad durch -d oder --destination')
args = parser.parse_args()

print(args.source)
print(args.destination)
final_path = mktemp(prefix='tmpisosys', dir=args.destination)
shutil.copytree(args.source, final_path)
Meine CMD Fehlermeldung:

Code: Alles auswählen

C:\Users\linden.rvdl\Downloads>python test.py --source C:\Users\Public\Music\Sam
ple Music\Kalimba.mp3 --destination C:\Users\linden.rvdl\Downloads
usage: test.py [-h] [--source SOURCE] [--destination DESTINATION]
test.py: error: unrecognized arguments: Music\Kalimba.mp3
Haste ne Idee?

wenn ich die Pfade als String übergebe dann kommt folgende meldung:

Code: Alles auswählen

C:\Users\linden.rvdl\Downloads>python test.py --source C:\Users\Public\Music\Sam
ple Music\Kalimba.mp3 --destination C:\Users\linden.rvdl\Downloads
usage: test.py [-h] [--source SOURCE] [--destination DESTINATION]
test.py: error: unrecognized arguments: Music\Kalimba.mp3
BlackJack

@RSMVDL: Sind das denn überhaupt Optionen? Wenn man beide Pfade angeben *muss* dann schau einfach ob die Länge von `sys.argv` stimmt, und wenn ja, dann weise die beiden passenden Elemente den Namen zu und das war's.

Edit: Überlege mal woran Python unterscheiden können soll, ob ein Leerzeichen zwei Argumente trennt, oder ob es Teil eines Wertes ist. Für den Text, den Du über die Anfrage nach Mitstreitern für's CloudComputing losgelassen hat, scheinst Du bei Deiner Erfahrung dort masslos übertrieben zu haben, denn sonst würdest Du so eine fundamentale Frage zum Thema Kommandozeilenaufrufe nicht stellen.
RSMVDL

@BlackJack

Ich brauchte bis dato einfach nicht groß Sachen zu Coden. Jetzt aber schon!
Ich sehe daran nichts verwerfliches... Ich weiß was ich kann und was nicht! Python anscheinend ja nicht!
Bashscripte funken bei mir ohne Probleme. Derzeit arbeite ich aber mit den Mist-system Windoof auf welchem ich die CMD so ziemlich noch nie benutzt habe!
Und ich kann dir Brief und Siegel darauf geben das ich von Dingen wie ESXi oder KVM bis hin zu GFS und DRBD um einiges mehr weiß als manch anderer. Ich hör von dir immer nur klasse Sprüche was ich mir durchlesen soll und glaub mir das tuhe ich. Ich habe zum Code einfach keinen Bezug also hör bitte auf mir das ständig vor die Birne zu klatschen!
Ich lern am besten wenn ich Direkte Bezugs-Beispiele habe! Fertig!
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

C:\Users\linden.rvdl\Downloads>python test.py --source C:\Users\Public\Music\Sample Music\Kalimba.mp3 --destination C:\Users\linden.rvdl\Downloads
Wenn Du die Frage "Wieviele Argumente werden hier übergeben?" beantworten kannst, dann kennst Du auch die Lösung für Dein Problem!
RSMVDL

@ All DANKE!

Mit Hilfe konnte ich den Quatsch jetzt endlich fertig bekommen! Ich danke Herzlich!

Code: Alles auswählen

#Temp_Datei anlegen
import shutil
from tempfile import mktemp
import argparse


#Source in Temp_Datei umwandeln (Paramterübergabe mit --source & --destination)
parser = argparse.ArgumentParser(description='Process some integers.')
source_path=parser.add_argument('--source','-s',action="store_true", help='Angabe Quellpfad durch -s oder --source')
destination_path=parser.add_argument('--destination','-d',action="store_true", help='Angabe Zeilpfad durch -d --destination')
final_path = mktemp(prefix='tmpisosys', dir=destination_path)
shutil.copytree(source_path, final_path)

Sollte nur darauf gucken das man nicht 2000 Verzeichnisse ineinander schachtelt
Antworten