2
votes

Passer une variable depuis une autre fonction

import os
import shutil


def listdirectory():
    global computername
    computername = input("What is the computer name? ")
    completepathlist = fr"\\{computername}\C$\Users"
    return os.listdir(completepathlist)

def username():
    global completepath
    global usernameinput
    usernameinput = input("What is the user name? ")
    completepath = fr"\\{computername}\C$\Users\{username}\AppData\Local\Google"

def programrunningcheck():
    password = input("What is your password? ")
    command = "taskkill /s " + str(computername) + " /u " + str(usernameinput) + " /p " +password+ " /im chrome.exe"
    print(command)
    os.system(command)

def deletegoogleapp():
    shutil.rmtree(completepath)

#Functions being called
print(listdirectory())
username()
programrunningcheck()
deletegoogleapp()
Everything works up until deletegoogleapp function is called and receive a
  \\DESKTOP-62A8SSM\C$\Users\"function username at
  0x010C8B28\AppData\Local\Google
looks to be not passing the variable completepath from another function to the googleapp function.

5 commentaires

ma suggestion serait que vous réécrivez ce que vous avez fait sans toutes ces fonctions, lorsque cela fonctionne, vous pouvez l'envelopper dans un seul appel de fonction. si vous avez besoin que chaque variable soit globale, avez-vous vraiment besoin de fonctions comme vous avez essayé de les utiliser?


Je suis d'accord que ce n'est peut-être pas mieux écrit - je suis nouveau dans la programmation et l'auto-apprentissage, donc je suis sûr que j'ai beaucoup de mauvaises pratiques


La variable username utilisée par fr "\\ {computername} \ C $ \ Users \ {username} \ AppData \ Local \ Google‌" est le nom du fonction l'instruction est dans - c'est-à-dire nom d'utilisateur de la fonction à 0x010C8B28 . Je pense que vous voulez usernameinput .


Vous pouvez utiliser des variables globales: stackoverflow.com/a/423596/6212957 OU vous pouvez transmettre la fonction précédente en tant que paramètre à obtenir sa valeur de retour lastfunction (secondfunction ())


ahed87 - j'adorerais voir un autre exemple d'écrire ceci dans une fonction - j'aimerais apprendre


3 Réponses :


0
votes

Vous devez donc stocker la valeur de retour de username , pour l'instant, vous ne transmettez rien à deletegoogleapp . Vous pouvez donc faire:

u <- username()
programrunningcheck()
deletegoogleapp(u)

Cela devrait fonctionner étant donné que le chemin u renvoyé est valide.


0 commentaires

0
votes

changer le nom d'utilisateur de votre fonction:

global completepath
global usernameinput

def username(self):
    usernameinput = input("What is the user name? ")
    completepath = fr"\\{computername}\C$\Users\{username}\AppData\Local\Google"


0 commentaires

0
votes

Correction du problème d'origine avec var et modification du codage

import os
import shutil
import time


def listdirectory():
    global computername
    computername = input("What is the computer name? ")
    completepathlist = fr"\\{computername}\C$\Users"
    return os.listdir(completepathlist)

def username():
    global completepath
    usernameinput = input("What is the user name? ")
    completepath = fr"\\{computername}\C$\Users\{usernameinput}\AppData\Local\Google"

def programrunningcheck():
    print("We need your credentials to kill chrome")
    techuser = input("What is your username? ")
    techpassword = input("What is your password? ")
    command = "taskkill /s " + str(computername) + " /u " + str(techuser) + " /p " +(techpassword)+ " /im chrome.exe"
    time.sleep(5)
    print(command)
    os.system(command)

def deletegoogleapp():
    shutil.rmtree(completepath)

#Functions being called
print(listdirectory())
username()
programrunningcheck()
deletegoogleapp()


2 commentaires

Pouvez-vous modifier ceci et ajouter comment cela a résolu votre problème? Cela aidera les autres avec un problème similaire.


Les correctifs étaient que ma variable pour le nom d'utilisateur ne correspondait pas à mon nom de chaîne pour le nom d'utilisateur - le plus gros problème était de transmettre le nom d'utilisateur entré à taskkill - maintenant demande un compte séparé disposant des droits d'administrateur à distance pour tuer la tâche sur ce PC