【问题标题】:confusion regarding python and python3 command关于 python 和 python3 命令的混淆
【发布时间】:2020-11-05 16:44:46
【问题描述】:

我有一个应用程序,我正在尝试使用 Python 使其与平台无关。

我在所有 3 个操作系统(Mac、Win10、Ubuntu)中都安装了 Python 3.x

我有一个 python 脚本 batch.py​​,它从内部调用其他 python 脚本,如下所示:

import os
import argparse
import shutil

if __name__ == '__main__':
    parser.add_argument("-i", "--infolder", default="./pdfs", 
        help="Input folder with PDFs. Default: ./pdfs")
    args = parser.parse_args()
    infolder =args.infolder
    # Watermarking process    
    watermark_outfolder = tmp+'/pdfs_watermarked'
    if not os.path.exists(watermark_outfolder):
        os.makedirs(watermark_outfolder)
    else:
        for root, dirs, files in os.walk(watermark_outfolder):
            for f in files:
                os.unlink(os.path.join(root, f))
            for d in dirs:
                shutil.rmtree(os.path.join(root, d))
    watermark_command = 'python watermark.py --in '+infolder
    os.system(watermark_command) 

我遇到的问题是在 Linux 中,当我使用 os.system('python ... 时脚本无法运行,它仅在我以 os.system('python3 ... 运行时才有效。 另一方面,当我在 Win10 中运行它时,它适用于 python,但不适用于 python3。 我试图检查python版本:

if sys.version_info[0] < 3:
        watermark_command = 'python watermark.py --in '+infolder
    else:
        watermark_command = 'python3 watermark.py --in '+infolder
    os.system(watermark_command)

这样做没有帮助,它在 Win10 中无法运行

【问题讨论】:

  • 我认为这是一个别名问题,实际使用 linux 的人可以证实这一点。一个简单的解决方法是设置别名 python 以重定向到 python3。在 macOS 上,我必须在 .zshrc 文件中这样做。我相信你在 macOS 上也有同样的问题,但你没有发现它,因为命令 python3 链接到 python 3,命令 python 链接到 python 2(macOS 上的默认安装)。我的 .zshrc 文件中的示例: alias python=/usr/local/bin/python3
  • 脚本不运行。您能否详细说明错误跟踪或其他内容?另外,脚本watermark.py 是否也依赖于平台?

标签: python python-3.x


【解决方案1】:

两件事:

(1) 不要使用os.system,除非你想注入shell(例如subprocess.call

想象一下,如果您的 infolder 被命名为 '; touch pwnd'(或者更邪恶的名称!)

(2) 使用sys.executable 代替pythonpython3sys.executable 指的是您正在运行的可执行文件

把所有这些放在一起,你会得到这样的东西:

subprocess.call((sys.executable, 'watermark.py', '--in', infolder))

【讨论】:

  • (2) 假设第一个脚本由 python 3 执行。这应该事先检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多