【问题标题】:Passing arguments to python exe将参数传递给 python exe
【发布时间】:2021-07-04 11:51:27
【问题描述】:

我正在尝试使用以下代码创建一个 python 可执行文件。

import pandas as pd
import pyodbc as po
import os
#variables
server = 'DESKTOP-9B94UPJ' 
database = 'DB1' 
username = 'etluser' 
password = 'password' 
rawfile_directory='E:\\Projects\\Ebay\\ETLApp\\'
cnxn = po.connect('DRIVER={SQL 
Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

df=pd.read_csv(rawfile_directory+"SPSS_Files\\"+filename,usecols=var_filteredCols)

cnxn = po.connect('DRIVER={SQL 
Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
     sql_stmt = "INSERT INTO "+var_table+" ("+var_DBCols+") values("+var_placeholder+")"
     cursor = cnxn.cursor()
     cursor.fast_executemany = True
     cursor.executemany(sql_stmt, df.values.tolist())
           # print(f'{len(df)} rows inserted to the {MY_TABLE} table')
     cursor.commit()
     cursor.close()
     cnxn.close()

我使用 pyinstaller 创建了一个 exe

pyinstaller --onefile etl.py

我想将运行时上的数据库凭据和文件夹路径传递给 exe。任何专家都可以告诉我如何实现这一目标吗?提前致谢

【问题讨论】:

  • 你可以使用argparse

标签: python


【解决方案1】:

如果您不想创建一个使用用户界面来提取凭据的 GUI 程序,那么您可能需要进行命令行操作。您可以通过传入参数然后使用sys.argv 提取它们来轻松完成上述操作

例如:

import sys
if len(sys.argv) < 6:
    raise ValueError("Not enough commandline arguments! Please run with <executable> <server> <database> <username> <password> <folder_path>")

server = sys.argv[1]
database = sys.argv[2]
username = sys.argv[3]
password = sys.argv[4]
rawfile_directory= sys.argv[5]

然后你可以使用类似的东西从命令提示符运行你的可执行文件

C:\> <EXEfilename> DESKTOP-9B Ebay_CX etluser password E:\Projects\Ebay\ETLApp

如果您想要一个更漂亮、更精致的命令行界面,请考虑使用argparse,这样您就可以为您的最终用户提供更多帮助,了解如何将不同的参数用于您的可执行文件,例如带有使用说明、--options 而不是 args、--help 支持等。

您还可以在运行时要求用户输入,例如使用input() 运行可执行文件后,但这不太标准

另见:after compiling python program, how to input arguments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2014-02-13
    • 2018-09-29
    • 2015-01-23
    相关资源
    最近更新 更多