2014-01-15 3 views
-1

У меня есть этот простой скрипт, который прикрепляет текстовый файл к электронному письму на Python. Когда я запускаю этот скрипт в IDLE, он отлично работает. Когда я запускаю его в сени Экспресс однако, я получаю эту ошибку: (Файл text.txt находится в том же каталоге, что и сценарий питона)Ошибка Python в Canopy, но не в IDLE

--------------------------------------------------------------------------- 
IOError         Traceback (most recent call last) 
C:\Program Files (x86)\Enthought\Canopy32\App\appdata\canopy-1.2.0.1610.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc) 
    195    else: 
    196     filename = fname 
--> 197    exec compile(scripttext, filename, 'exec') in glob, loc 
    198  else: 
    199   def execfile(fname, *where): 

C:\Users\499293\Desktop\Project Folder\attachex.py in <module>() 
     7 
     8 # Read a file and encode it into base64 format 
----> 9 fo = open(filename, "rb") 
    10 filecontent = fo.read() 
    11 encodedcontent = base64.b64encode(filecontent) # base64 

IOError: [Errno 2] No such file or directory: 'text.txt' 

Это код, я использую:

#!/usr/bin/python 

import smtplib 
import base64 

filename = "text.txt" 

# Read a file and encode it into base64 format 
fo = open(filename, "rb") 
filecontent = fo.read() 
encodedcontent = base64.b64encode(filecontent) # base64 

sender = '[email protected]' 
reciever = '[email protected]' 

marker = "AUNIQUEMARKER" 

body =""" 
This is a test email to send an attachement. 
""" 
# Define the main headers. 
part1 = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
Subject: Sending Attachement 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary=%s 
--%s 
""" % (marker, marker) 

# Define the message action 
part2 = """Content-Type: text/plain 
Content-Transfer-Encoding:8bit 

%s 
--%s 
""" % (body,marker) 

# Define the attachment section 
part3 = """Content-Type: multipart/mixed; name=\"%s\" 
Content-Transfer-Encoding:base64 
Content-Disposition: attachment; filename=%s 

%s 
--%s-- 
""" %(filename, filename, encodedcontent, marker) 
message = part1 + part2 + part3 

try: 
    smtpObj = smtplib.SMTP('mailhost.work.com', 25) 
    smtpObj.sendmail(sender, reciever, message) 
    print "Successfully sent email" 
except Exception: 
    print "Error: unable to send email" 

Я действительно не понимаю, что означает ошибка или почему я получаю ее с помощью Canopy, но не IDLE. (Я только что скачал Навес воспользоваться встроенной в Matplotlib и NumPy)

+0

Не навеса позволяет вам перетаскивать текстовые файлы в программу? Я помню, что у левой стороны был список доступных элементов/переменных. –

+0

@EdgarAroutiounian имеет браузер документов, который я могу перетащить файлы для редактирования. – diggers3

ответ

3

Тот факт, что файл находится в том же каталоге, не имеет значения - она ​​должна быть в текущей рабочей директории - IOW каталог, который вы при запуске скрипта. Кроме того, вам нужно либо передать путь файла в качестве аргумента, либо вычислить путь из местоположения скрипта (который вы можете получить из магической переменной __file__).

0

Что сказал Бруно.

также:

В правом верхнем углу панели Python Canopy является выпадающее меню. Вы можете использовать это, чтобы установить текущий рабочий каталог в соответствии с каталогом вашего файла Python (или, действительно, всегда синхронизировать с каталогом открытого файла python). Это было бы простым обходным путем для предположений, которые делает ваш код.

Эта функция может быть полезна для новичков, хотя обычно это не то, что захочет опытный разработчик.

 Смежные вопросы

  • Нет связанных вопросов^_^