Getting code from a .txt on a website and pasting it in a tempfile PYTHON

Question:

I was trying to make a script that gets a .txt from a websites, pastes the code into a python executable temp file but its not working. Here is the code:

from urllib.request import urlopen as urlopen
import os
import subprocess
import os
import tempfile

filename = urlopen("https://randomsiteeeee.000webhostapp.com/script.txt")
temp = open(filename)
temp.close()
    # Clean up the temporary file yourself
os.remove(filename)

temp = tempfile.TemporaryFile()
temp.close()

If you know a fix to this please let me know. The error is :

  File "test.py", line 9, in <module>
    temp = open(filename)
TypeError: expected str, bytes or os.PathLike object, not HTTPResponse

I tried everything such as a request to the url and pasting it but didnt work as well. I tried the code that i pasted here and didnt work as well.

And as i said, i was expecting it getting the code from the .txt from the website, and making it a temp executable python script

Asked By: munip

||

Answers:

you are missing a read:

from urllib.request import urlopen as urlopen
import os
import subprocess
import os
import tempfile

filename = urlopen("https://randomsiteeeee.000webhostapp.com/script.txt").read() # <-- here
temp = open(filename)
temp.close()
    # Clean up the temporary file yourself
os.remove(filename)

temp = tempfile.TemporaryFile()
temp.close()

But if the script.txt contains the script and not the filename, you need to create a temporary file and write the content:

from urllib.request import urlopen as urlopen
import os
import subprocess
import os
import tempfile

content = urlopen("https://randomsiteeeee.000webhostapp.com/script.txt").read() # 
with tempfile.TemporaryFile() as fp:
    name = fp.name
    fp.write(content)

If you want to execute the code you fetch from the url, you may also use exec or eval instead of writing a new script file.
eval and exec are EVIL, they should only be used if you 100% trust the input and there is no other way!

EDIT: How do i use exec?

Using exec, you could do something like this (also, I use requests instead of urllib here. If you prefer urllib, you can do this too):

import requests

exec(requests.get("https://randomsiteeeee.000webhostapp.com/script.txt").text)
Answered By: Lorenz Hetterich

Your trying to open a file that is named "the content of a website".

filename = "path/to/my/output/file.txt"
httpresponse = urlopen("https://randomsiteeeee.000webhostapp.com/script.txt").read()
temp = open(filename)
temp.write(httpresponse)
temp.close()

Is probably more like what you are intending

Answered By: Noscere
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.