编译后为什么我的python脚本会中断?

时间:2016-09-10 02:23:24

标签: python python-3.x

我正在检查编译python脚本后我获得了多少性能提升。在研究这个问题后,我认为我实际上并没有看到我编写的脚本性能的提高,因为我发现一旦加载了脚本,执行时间就不会增加。我仍然想知道为什么这在编译后无法运行,因为这是我第一次尝试这个。这是我的剧本

#!/bin/python3
from datetime import datetime
start = datetime.now()

import psutil

BYTES_PER_GB = 1024*1024*1024

# Memory
m = psutil.virtual_memory()
#total = m.total/BYTES_PER_GB 
#available = m.available/BYTES_PER_GB
#used = m.used/BYTES_PER_GB
m_free= m.free/BYTES_PER_GB
m_percent = m.percent

# Swap
s = psutil.swap_memory()
s_free = s.free/BYTES_PER_GB
s_percent = s.percent

print(' %.1fG (%.1f%%)  %.1fG (%.1f%%)' % (m_free, m_percent, s_free, s_percent))
print(' %.1fG (%.1f%%)  %.1fG (%.1f%%)' % (m_free, m_percent, s_free, s_percent))

print(datetime.now() - start)

我正在尝试使用此行进行编译

python3 -m py_compile memory

在我的print语句中,我有一些来自字体awesome的特殊字符。不确定这是否会导致问题,但如果它在我的帖子中没有正确显示那么那就是那个。

我尝试运行编译文件时的输出是

./memorycpython-35.pyc: line 1: $'\026\r\r': command not found
./memorycpython-35.pyc: line 2: �k�W��@s�ddlmZej�ZddlZdZej�Zejeej: command not found
./memorycpython-35.pyc: line 3: syntax error near unexpected token `)'
./memorycpython-35.pyc: line 3: `ej
                                �Z
                                  e
e                                      je
 j  Ze�eej�e�dS)�)datetimeNiii@)rZnow�startZpsutilZ
                                                                   BYTES_PER_GBZvirtual_memory�mZfreeZm_freeZpercentZ   m_percentZ
              swap_memory�sZs_freeZ s_percent�print�rr�memory<module>s



       '
   ^[[?62;c^[[?62;c

修改

为了缩小问题,我编写了以下脚本

#!/bin/python3
print("Hello World!")

这是输出

./testcpython-35.pyc: line 1: $'\026\r\r': command not found
./testcpython-35.pyc: line 2: syntax error near unexpected token `)'
./testcpython-35.pyc: line 2: `�r�W%�@sed�dS)z
                                               Hello World!N)�print�rr�./test<module>s'

使用

编译
python3 -m py_compile ./test

这会在__pycache__/中创建一个名为testcpython-35.pyc的文件,然后我会chmod +x testcpython-35.pyc./testcpython-35.pyc

1 个答案:

答案 0 :(得分:1)

看来我的问题是./testcpython-35.pyc部分。当我运行python3 testcpython-35.pyc时,独立于我是否chmod +x ./testcpython-35.pyc,输出被拼写错误。只要我通过首先使用python3指定运行它的程序来运行已编译的程序,它就会按预期输出Hello World!