You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从Python文件调用外部Python文件并传递路径变量作为参数

在Python中传递变量参数给另一个脚本文件

我来帮你解决这个问题,把thisdir[i](原PDF文件路径)和text_path(目标TXT文件路径)作为参数传给另一个Python脚本,有几种实用的方法,下面给你一步步演示:

方法一:使用subprocess模块(推荐方案)

subprocess是Python官方推荐的替代os.system的模块,它更灵活,还能自动处理路径含空格的问题,不用手动加引号。

1. 修改主脚本代码

把原来的os.system替换成subprocess.run,直接把变量作为列表元素传递:

import os
import subprocess

# 获取所有文件路径
thisdir = [os.path.join(r, file) for r, d, f in os.walk("C:\\Users\\vnitin\\OneDrive - NetApp Inc\\IDP\\Files\\") for file in f]

for pdf_path in thisdir:
    # 只处理PDF文件,跳过非PDF的文件避免错误
    if not pdf_path.endswith('.pdf'):
        continue
    text_path = pdf_path.replace('pdf', 'txt')
    print(f"正在处理: {pdf_path} -> {text_path}")
    
    # 调用另一个Python脚本,传递参数
    subprocess.run([
        'py',  # 如果是Windows的Python launcher,用'python'也可以
        'pdf2txt.py',  # 你的目标脚本,注意路径要正确
        '-o', text_path,  # 输出路径参数
        pdf_path  # 输入PDF路径参数
    ], check=True)  # check=True会在子脚本出错时抛出异常,方便调试

2. 在pdf2txt.py中接收参数

你可以用argparse模块优雅地解析命令行参数(比直接用sys.argv更清晰,还支持帮助信息):

import argparse

def main():
    # 创建参数解析器
    parser = argparse.ArgumentParser(description='将PDF文件转换为TXT文件')
    parser.add_argument('input_pdf', help='输入PDF文件的路径')
    parser.add_argument('-o', '--output', required=True, help='输出TXT文件的路径')
    
    # 解析参数
    args = parser.parse_args()
    
    # 这里写你的PDF转TXT逻辑,比如用pdfplumber、PyPDF2等库
    print(f"转换任务: {args.input_pdf} → {args.output}")
    # 示例转换代码(你需要替换成实际的转换逻辑):
    # with pdfplumber.open(args.input_pdf) as pdf:
    #     text = '\n'.join([page.extract_text() for page in pdf.pages])
    # with open(args.output, 'w', encoding='utf-8') as f:
    #     f.write(text)

if __name__ == "__main__":
    main()

如果你不想用argparse,也可以直接用sys.argv获取参数:

import sys

def main():
    # sys.argv[0]是脚本本身的名称,后面的是传入的参数
    # 参数顺序:-o 输出路径 输入PDF路径
    input_pdf = sys.argv[-1]
    output_txt = sys.argv[2]
    
    print(f"转换PDF: {input_pdf} → {output_txt}")
    # 你的转换逻辑...

if __name__ == "__main__":
    main()

方法二:继续使用os.system(兼容旧代码)

如果你想保留原来的os.system写法,需要用字符串格式化把变量嵌入命令里,注意路径含空格时必须加双引号

import os

thisdir = [os.path.join(r, file) for r, d, f in os.walk("C:\\Users\\vnitin\\OneDrive - NetApp Inc\\IDP\\Files\\") for file in f]

for pdf_path in thisdir:
    if not pdf_path.endswith('.pdf'):
        continue
    text_path = pdf_path.replace('pdf', 'txt')
    print(text_path)
    
    # 用f-string格式化命令,给路径加双引号处理空格
    command = f'py pdf2txt.py -o "{text_path}" "{pdf_path}"'
    os.system(command)

这种方法的缺点是需要手动处理路径空格,而且无法直接获取子脚本的执行状态,所以还是更推荐subprocess

注意事项

  • 确保pdf2txt.py和主脚本在同一个目录下,或者你可以传入绝对路径(比如'C:\\your\\path\\to\\pdf2txt.py'
  • 如果你的Python环境有多个版本,建议用python3或者指定具体的Python路径(比如'C:\\Python39\\python.exe')来调用脚本
  • subprocess时,参数是以列表形式传递的,不需要加引号,模块会自动处理特殊字符

内容的提问来源于stack exchange,提问作者Nitin

火山引擎 最新活动