关于python和python3命令的困惑

阿姆里塔(Amrita Deb)

我有一个应用程序,试图与Python无关。

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

我有一个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中运行

安东尼·索特蒂尔

两件事情:

(1)除非要注入外壳,否则不要使用os.systemsubprocess.call例如,首选

想象一下您是否infolder被命名'; touch pwnd'(或更邪恶!)

(2)使用sys.executable代替pythonpython3sys.executable指与您一起运行的可执行文件

将所有这些放在一起,您将得到以下内容:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章