如何从另一个Python项目调用Python项目

2024-09-30 10:36:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我不是一个程序员,所以请容忍我,如果我不准确或不真正理解的答复

我使用PyCharm,它对我来说非常好,python脚本在PyCharm中被称为项目,我正在运行一些webscraping脚本来检索互联网上的竞争对手价格。它们很简单,但效果相当好。为了完成这个过程,我必须独立调用每个脚本(每个竞争对手一个脚本),等待它完成,然后调用另一个脚本,等等。我实际上可以同时调用或运行所有脚本,但它在视觉上非常混乱,有时会出现错误,一次运行一个脚本并获得结果更简单,他们每人需要10-15分钟

但我不能坐等他们结束。我试着把它们合并到一个大项目中,但那真的很混乱,因为每个网页都有细微差别,不同之处,我在每个页面上使用不同的变量来考虑差异,这样就更简单了。但这很费时,基本上迫使我在运行它们时呆在原地

我正在尝试自动化这个过程,并使用TkInter编写一个小项目,该项目(理想情况下)调用或运行每个项目,一次一个,我还希望从运行的每个项目中检索退出代码,以便我知道项目/脚本是否正常运行

我已经整理好了TkInter半成品,并成功地启动和运行了按钮、时钟等(我计划每天运行这个脚本四次,大约每3小时运行一次)。我有信心我能做到这一点

但我无法从另一个PyCharm项目调用/运行/导入PyCharm项目。这是我一直在尝试和使用的最后一次迭代(当按下TkInter GUI上的按钮时调用这些:

  # create button, link it to run web price scraper program
    webscraperbutton = Button(self, text="Run", command=self.run_price_scraper)
    # place button at (400,100)
    webscraperbutton.place(x=200, y=100)

def run_price_scraper(self):
    # exec(open('/Users/manuel/PycharmProjects/PriceScraper/main.py').read())
    # os.system("/Users/manuel/PycharmProjects/PriceScraper/main.py")
    # subprocess.call('/Users/manuel/PycharmProjects/PriceScraper/main.py', shell=True)

它们都是d,因为我一直在尝试各种组合,但到目前为止没有任何效果

以下是我得到的错误:

subprocess.call('/Users/manuel/PycharmProjects/PriceScraper/main.py', shell=True)

 from: can't read /var/mail/selenium
 from: can't read /var/mail/selenium.webdriver.chrome.options
 from: can't read /var/mail/selenium.webdriver.support.select
 from: can't read /var/mail/selenium.webdriver.common.by
 from: can't read /var/mail/selenium.webdriver.support.ui
 from: can't read /var/mail/selenium.webdriver.support
 /Users/manuel/PycharmProjects/PriceScraper/main.py: line 8: import: command not found
 /Users/manuel/PycharmProjects/PriceScraper/main.py: line 12: syntax error near unexpected token `('
 /Users/manuel/PycharmProjects/PriceScraper/main.py: line 12: `chrome_options = Options()'
From os.system("/Users/manuel/PycharmProjects/PriceScraper/main.py") same error

from: can't read /var/mail/selenium
from: can't read /var/mail/selenium.webdriver.chrome.options
from: can't read /var/mail/selenium.webdriver.support.select
from: can't read /var/mail/selenium.webdriver.common.by
from: can't read /var/mail/selenium.webdriver.support.ui
from: can't read /var/mail/selenium.webdriver.support
/Users/manuel/PycharmProjects/PriceScraper/main.py: line 8: import: command not found
/Users/manuel/PycharmProjects/PriceScraper/main.py: line 12: syntax error near unexpected token `('
/Users/manuel/PycharmProjects/PriceScraper/main.py: line 12: `chrome_options = Options()'


From exec(open('/Users/manuel/PycharmProjects/PriceScraper/main.py').read())

Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tkinter/__init__.py", line 
1884, in __call__
return self.func(*args)
File "/Users/manuel/PycharmProjects/PYGUI/main.py", line 31, in run_stock_scraper
exec(open('/Users/manuel/PycharmProjects/PriceScraper/main.py').read())
File "<string>", line 402, in <module>
File "<string>", line 29, in site_login
NameError: name 'driver' is not defined

我如何以一种简单的方式调用或运行另一个PyCharm项目,让它运行并获得退出代码

我曾想过尝试用每个项目/脚本制作一个Python应用程序,并尝试调用一个应用程序,但我不知道这是否可行

这是台词

# Import Libraries
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import pandas as pd


# Start the session
chrome_options = Options()

# Option to run Headless
# chrome_options.add_argument('--headless')

# Activate Chrome Selenium Driver
driver = webdriver.Chrome(executable_path='/Applications/System Utilities/chromedriver')
# Define maximum wait
wait = WebDriverWait(driver, 20)

接下来的几行我编辑了一些东西,原因很明显,但正如我之前所说的,所有的工作都完美无缺

# Site Login Function
def site_login():
    # Login Data
    username = "XXXXXXXXXX"
    password = "XXXXXXXXXX"

    driver.get('https://XXXXXXXXXXXX.com/')
    # Wait for element to be present
    wait.until(ec.visibility_of_element_located((By.ID, "okta-signin-username")))
    # Send Username
    driver.find_element_by_id("okta-signin-username").send_keys(username)
    # print("username")
    # Wait for element to be present
    wait.until(ec.visibility_of_element_located((By.ID, "okta-signin-password")))
    # Send Password
    driver.find_element_by_id("okta-signin-password").send_keys(password)
    # print("password")
    # Wait for element to be present
    wait.until(ec.element_to_be_clickable((By.ID, "okta-signin-submit")))
    # Click Signin
    driver.find_element_by_id("okta-signin-submit").click()
    # print("Click")

Tags: 项目frompy脚本readmainvarselenium

热门问题