Mykal_M Mykal_M - 9 months ago 37
Python Question

Why is exec() command running with no errors but not producing the expected output?

I'm creating a very basic python program that allows a user to enter a command that is then ran as code.

For example I have imported a file called textScripts.py: within that file there is a function called

createFile()
. When the user enters
textScripts.createFile()
it is passed into
exec()
. It runs without error and exits the program but the file isn't created!

I know the
createFile()
function works because if I put
textScripts.createFile()
in the code it creates a file.

Here is the relevant snippet of code:

commandList=[]
while(commandRun):
count = 0
commandList.append(input(">>>"))
exec(commandList[count])
print(commandList[count])
count += 1


here is a screenshot of the code being run:

>>> textScripts.createFile()
>>>


here is a screenshot of the folder:

__pyCache__
textScripts.py
CLIFile.py


there should be a file in this folder

here is the function
createFile()
:

def createFile(
destination = os.path.dirname(__file__),
text = "Sick With the Python\n"
):
''' createFile(destination, text)

This script creates a text file at the
Specified location with a name based on date
'''
date = t.localtime(t.time())
name = "%d_%d_%d.txt" %(date[1], date[2], date[0])

if not(os.path.isfile(destination + name)):
f = open(destination + name, "w")
f.write( text )
f.close
else:
print("file already exists")


I apologize in advance if this is an obvious questions; I'm new to python and have been looking for hours for an answer as to why this happens.

ADR ADR
Answer Source

You save file to wrong folder (you can insert "print(destination + name)" in your function)

You need to replace this:

destination + name

to this:

os.path.join(destination, name)

PS:

  1. You don't close the file (f.close -> f.close())
  2. The best way to open any resource is using "with".

For example:

with open('file.txt', 'w') as f:
    f.write('line')