1
votes

Pourquoi le module os n'exécute-t-il pas la commande wget cmd?

J'essaie de télécharger un fichier zip sur le Web et j'essaye de le télécharger par commande de console en utilisant wget -O fileName urlLink, mais en essayant le code, CMD s'ouvre pendant une seconde puis se ferme et je ne trouve pas le fichier n'importe où.

J'ai essayé d'utiliser d'autres moyens de télécharger le fichier, mais ils renvoient ERREUR 403. L'utilisation de wget dans CMD télécharge le bon fichier, mais pas dans le code python.

def gotoDownload(link):
    try:
        with requests.Session().get(link) as download:
            if isUrlOnline(download):
                soup = BeautifulSoup(download.content, 'html.parser')
                filtered = soup.find_all('script')
                zip_file_url = re.search(r"('http.*?')", filtered[17].text).group().replace("'", "")

                os.system("wget -O {0} {1}".format('CreatureFinalZTL.zip', zip_file_url))


7 commentaires

notez qu'il existe un package python wget ...


vous devez supprimer os.system et utiliser subprocess.run. Passez également les arguments sous forme de liste. Dans votre cas, il est très possible que zip_file_url contienne des caractères étranges qui font échouer votre ligne de commande


Tels que le caractère & dans les chaînes de requête d'URL.


La chaîne est la suivante:

3 Réponses :


1
votes

Il y a quelques choses qui peuvent aider ici (cela peut ou non résoudre votre problème, car cela dépend de l'installation et de la configuration de votre machine). Tout d'abord, je suggérerais d'être plus précis sur les chemins. Vous pouvez utiliser des chemins absolus dans la ligne wget comme ceci:

print( zip_file_url )

Ceci est généralement utile au cas où l'environnement Python ne fonctionnerait pas dans un répertoire que vous attendez. Alternativement, vous pouvez forcer le répertoire avec la commande python suivante:

os.chdir( path )

Ensuite, vous pouvez opérer avec des chemins relatifs sans souci. Une deuxième chose que je suggérerais est de confirmer que l'URL correspond à ce que vous attendez. Imprimez-le simplement comme ceci:

"wget -O {0} {1}".format('/path/to/output/dir/CreatureFinalZTL.zip', zip_file_url)

Cela peut sembler idiot, mais il est important de confirmer que votre regex fonctionne correctement.


1 commentaires

J'ai essayé cela, mais malheureusement cela n'a pas fonctionné :(, regex fonctionne correctement.



1
votes

Utilisez plutôt sous-processus .

import subprocess

...

subprocess.run(["wget",  "-O", 'CreatureFinalZTL.zip', zip_file_url])

Cela évite toute implication du shell avec la commande que vous souhaitez exécuter.


1 commentaires

Je l'ai essayé, mais il indique FileNotFoundError: [WinError 2] Le système ne trouve pas le fichier spécifié, y a-t-il quelque chose que je fais mal?



0
votes


0 commentaires