Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于python和python3命令的混淆_Python_Python 3.x - Fatal编程技术网

关于python和python3命令的混淆

关于python和python3命令的混淆,python,python-3.x,Python,Python 3.x,我有一个应用程序,我正试图使其与Python平台无关 我在Mac、Win10和Ubuntu的所有3个操作系统中都安装了Python3.x 我有一个python脚本batch.py,它从自身内部调用其他python脚本,如下所示: import os import argparse import shutil if __name__ == '__main__': parser.add_argument("-i", "--infolder", def

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

我在Mac、Win10和Ubuntu的所有3个操作系统中都安装了Python3.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中无法运行有两件事:

1不要使用os.system,除非您希望注入shell。例如,更喜欢subprocess.call

想象一下,如果你的信息夹被命名为';触碰pwnd’或其他更邪恶的东西

2使用sys.executable代替python或python3。指正在运行的可执行文件

把这些放在一起,你会得到这样的结果:

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) 
subprocess.callsys.executable,'watermark.py','in',infolder 两件事:

1不要使用os.system,除非您希望注入shell。例如,更喜欢subprocess.call

想象一下,如果你的信息夹被命名为';触碰pwnd’或其他更邪恶的东西

2使用sys.executable代替python或python3。指正在运行的可执行文件

把这些放在一起,你会得到这样的结果:

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) 
subprocess.callsys.executable,'watermark.py','in',infolder
我认为这是一个别名问题,只有真正使用linux的人才能证实这一点。一个简单的修复方法是设置别名python以重定向到python3。在macOS上,我必须在.zshrc文件中这样做。我相信您在macOS上也有同样的问题,但您没有发现它,因为命令python3链接到python3,命令python链接到macOS上的python2默认安装。我的.zshrc文件中的示例:alias python=/usr/local/bin/python3Script未运行。你能详细说明一下错误跟踪之类的吗?另外,脚本watermark.py是否也依赖于平台?我认为这是一个别名问题,实际上使用linux的soneone可以证实这一点。一个简单的修复方法是设置别名python以重定向到python3。在macOS上,我必须在.zshrc文件中这样做。我相信您在macOS上也有同样的问题,但您没有发现它,因为命令python3链接到python3,命令python链接到macOS上的python2默认安装。我的.zshrc文件中的示例:alias python=/usr/local/bin/python3Script未运行。你能详细说明一下错误跟踪之类的吗?另外,脚本watermark.py是否也依赖于平台?2假设第一个脚本由python 3执行。这应该事先检查。2假设第一个脚本由python 3执行。这应该事先检查。