3 votes

Python récupère les arguments passés

Je travaille sur un projet qui permet à l'utilisateur de définir un chemin pour télécharger des fichiers en ajoutant l'argument nécessaire, mais pour une raison quelconque, la variable upload_destination est toujours vide ! Voici mon code

def main():
  global listen
  global port
  global execute
  global command
  global upload_destination
  global target

  if not len(sys.argv[1:]):
     usage()
  try:
     opts, args = getopt.getopt(sys.argv[1:], "hle:t:p:cu", ["help", "listen", "execute", "target", "port", "command", "upload"])
  except getopt.GetoptError as err:
     print str(err)
     usage()

  for o,a in opts:
     if o in ("-h", "--help"):
         usage()
     elif o in ("-l", "--listen"):
         listen = True
     elif o in ("-e", "--execute"):
         execute = True
     elif o in ("-c", "--commandshell"):
         command = True
     elif o in ("-u", "--upload"):
         #Here's the problem, a is empty even though I include a path
         upload_destination = a
     elif o in ("-t", "--target"):
         target = a
     elif o in ("-p", "--port"):
         port = int(a)
     else:
         assert False, "Unhandled Option"

  if not listen and len(target) and port > 0:
     buffer = sys.stdin.read()
     client_sender(buffer)

  if listen:
     server_loop()

J'appelle le programme en entrant

C:\Users\Asus\Desktop\PythonTest>python test.py -l -c -p 3500 -u C:\Users\Asus\Desktop\Test

7voto

Maximilian Peters Points 13600

Il s'agit simplement de deux points manquants : .

https://docs.python.org/2/library/getopt.html

options est la chaîne de lettres des options que le script veut reconnaître, avec les options qui nécessitent un argument suivi d'un deux-points (':' ; c'est-à-dire le même format que celui utilisé par Unix getopt()).

Changez le "hle:t:p:cu" a "hle:t:p:cu:" et cela devrait fonctionner (du moins, cela a fonctionné pour moi avec Win7/Python3.5).

Lorsque vous exécutez print(opts, args) avec votre code, vous obtenez :

([('-l', ''), ('-c', ''), ('-p', '3500'), ('-u', '')], ['C:UsersAsusDesktopTest'])

avec les deux-points ajoutés, cela devient :

([('-l', ''), ('-c', ''), ('-p', '3500'), ('-u', 'C:UsersAsusDesktopTest')], [])

Sans les deux points C:\Users\... devient un nouvel argument.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X