关于python和python3命令的混淆
我有一个应用程序,我正试图使其与Python平台无关 我在Mac、Win10和Ubuntu的所有3个操作系统中都安装了Python3.x 我有一个python脚本batch.py,它从自身内部调用其他python脚本,如下所示:关于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
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执行。这应该事先检查。