Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?

Đã giải quyết câu trả lời của tôi dưới đây cho bất cứ ai có thể thấy điều này hữu ích. see my answer below for anyone who might find this helpful.

Tôi có hai tập lệnh a.py và B.Py. Trong thư mục hiện tại của tôi "C: \ Users \ myname \ Desktop \ Main", tôi chạy> Python a.py.

Kịch bản đầu tiên, a.py chạy trong thư mục hiện tại của tôi, thực hiện một cái gì đó cho một loạt các tệp và tạo một thư mục mới (testa) với các phiên bản được chỉnh sửa của các tệp được chuyển đồng thời vào thư mục mới đó. Sau đó, tôi cần chạy B.Py cho các tệp trong Testa.

Là người mới bắt đầu, tôi sẽ chỉ sao chép và dán tập lệnh B.Py của mình vào Testa và thực thi lệnh lại "> Python B.Py", chạy một số lệnh trên các tệp mới đó và tạo một thư mục khác (testb) với các tệp được chỉnh sửa đó.

Tôi đang cố gắng loại bỏ những rắc rối của việc chờ đợi a.py kết thúc, chuyển sang thư mục mới đó, dán B.Py, và sau đó chạy B.Py. Tôi đang cố gắng viết một kịch bản bash thực thi các tập lệnh này trong khi duy trì hệ thống phân cấp thư mục của tôi.

#!/usr/bin/env bash
 python a.py && python b.py

Script a.py chạy trơn tru, nhưng B.Py hoàn toàn không thực thi. Không có thông báo lỗi nào xảy ra về B.Py không thành công, tôi chỉ nghĩ rằng nó không thể thực thi vì một khi a.py được thực hiện, B.Py không tồn tại trong thư mục mới đó. Có một kịch bản nhỏ mà tôi có thể thêm trong B.Py di ​​chuyển nó vào thư mục mới không? Tôi thực sự đã thử thay đổi đường dẫn thư mục B.Py nhưng nó không hoạt động.

Ví dụ trong B.Py:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")

Tôi đã thay đổi mydirs thành mydir_new trong tất cả các trường hợp trong B.Py, nhưng điều đó cũng không có gì khác biệt ... Tôi cũng không biết cách chuyển tập lệnh vào một thư mục mới trong Bash.

Như một sơ đồ nhỏ của các thư mục:

MAIN # main folder with unedited files and both a.py and b.py scripts
|
| (execute a.py)
|
--------testA # first folder created with first edits of files
         |
         | (execute b.py)
         |
         --------------testB # final folder created with final edits of files

TLDR: Làm cách nào để thực hiện a.py và B.Py từ thư mục thử nghiệm chính (kiểu tập lệnh bash?), Nếu B.Py dựa vào các tệp được tạo và lưu trữ trong Testa. Thông thường tôi sao chép và dán B.Py vào Testa, sau đó chạy B.Py - nhưng bây giờ tôi có hơn 200 tệp để sao chép và dán là một sự lãng phí thời gian.

  • Các tệp và cấu trúc thư mục
  • Thực hiện tập lệnh Python trên thiết bị đầu cuối/shell
  • Chạy tập lệnh Python trong một thư mục khác dưới dạng tập lệnh thông thường
  • Chạy tập lệnh Python trong một thư mục khác dưới dạng mô -đun
    • Thêm một con đường vào môi trường Python
    • Phương pháp 1: Sử dụng gói SYS
    • Phương pháp 2A: Thêm đường dẫn vào biến môi trường (trên Linux và Mac)
    • Phương pháp 2b: Thêm đường dẫn vào biến môi trường (trên Windows)

Có hai cách bạn có thể muốn chạy tập lệnh Python nằm trong một thư mục khác - dưới dạng tập lệnh thông thường hoặc nhập và chạy nó như một mô -đun. Bài viết này tập trung vào cách chúng ta có thể làm điều này.– as a regular script or import and run it as a module. This article focuses on how we can do this.

Nội dung

  • 1 tệp và cấu trúc thư mục Files and Directory Structure
  • 2 Thực hiện tập lệnh Python trên thiết bị đầu cuối/shell Executing Python Script on Terminal/Shell
  • 3 Chạy tập lệnh Python trong một thư mục khác dưới dạng tập lệnh thông thường Running Python Script in another Directory as Regular Script
  • 4 Chạy tập lệnh Python trong một thư mục khác dưới dạng mô -đun Running Python Script in another Directory as a Module
    • 4.1 Thêm một đường dẫn vào môi trường Python Adding a path into the Python environment
    • 4.2 Phương pháp 1: Sử dụng gói SYS Method 1: Using the sys package
    • 4.3 Phương pháp 2A: Thêm đường dẫn vào biến môi trường (trên Linux và Mac) Method 2a: Adding path to an environment variable (on Linux and Mac)
    • 4.4 Phương pháp 2b: Thêm đường dẫn vào biến môi trường (trên Windows) Method 2b: Adding path to an environment variable (on Windows)

Các tệp và cấu trúc thư mục

Thực hiện tập lệnh Python trên thiết bị đầu cuối/shellrunScript1.py to run two other files, script1.py and module1.py, located in another directory. We will execute script1.py as a regular Python script and module1.py as a module.

Chạy tập lệnh Python trong một thư mục khác dưới dạng tập lệnh thông thường

Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?
Chạy tập lệnh Python trong một thư mục khác dưới dạng mô -đun

Thêm một con đường vào môi trường PythonrunScript1.py, but the content of the other two files will remain the same throughout this post. It is as follows:

script1.py:

def add(a, b):
    return a+b
def multiply(a, b):
    return a*b
x1, x2 = 7, 5
print(f"{x1}+{x2} is equal to",add(x1, x2))
if __name__ == '__main__':
    x1, x2 = 3, 5
    print(f"{x1}*{x2} is equal to",multiply(x1, x2))

Phương pháp 1: Sử dụng gói SYS

Phương pháp 2A: Thêm đường dẫn vào biến môi trường (trên Linux và Mac)

module1.py:

class BasicOperations():
    def __init__(self, value1, value2):
   	 self.value1 = value1
   	 self.value2 = value2
    def add(self):
   	 return self.value1+self.value2
    def multiply(self):
   	 return self.value1*self.value2
    def power(self):
   	 return self.value1**self.value2
    def integer_division(self):
   	 return self.value1//self.value2
if __name__ == '__main__':
    print("5 plus 7 is equals to: ", 5+7)
    s = BasicOperations(2, 5)
    print(s.multiply())

Có hai cách bạn có thể muốn chạy tập lệnh Python nằm trong một thư mục khác - dưới dạng tập lệnh thông thường hoặc nhập và chạy nó như một mô -đun. Bài viết này tập trung vào cách chúng ta có thể làm điều này. module1.py has one class (BasicOperations()) with several functions performing different basic mathematical operations.

Thực hiện tập lệnh Python trên thiết bị đầu cuối/shell

Chạy tập lệnh Python trong một thư mục khác dưới dạng tập lệnh thông thường“python3 script_name”.

Chạy tập lệnh Python trong một thư mục khác dưới dạng mô -đun

Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?

Thêm một con đường vào môi trường Python“Python3” to “Python” in every command and script, so it looks like this: “python script_name”.

Phương pháp 1: Sử dụng gói SYSrunScript1.py as follows,

Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?

Lưu ý: Trong bài đăng này, chúng tôi sẽ sử dụng dấu hiệu đô la ($) để hiển thị rằng chúng tôi đang chạy tập lệnh trên thiết bị đầu cuối, ví dụ, $ python3 chạy RunScript1.py. In this post, we will use the dollar sign ($) to show that we are running the script on the terminal, for example, $ python3 runScript1.py.

Chạy tập lệnh Python trong một thư mục khác dưới dạng tập lệnh thông thường

Tập lệnh Python có thể được sử dụng để thực thi một tập lệnh khác trên một thư mục khác với sự trợ giúp của mô -đun HĐH hoặc quy trình con. Sử dụng các mô -đun này để chạy các tệp Python tương đương với việc chạy tập lệnh Python trên shell/thiết bị đầu cuối. Cú pháp chung được sử dụng làos or subprocess module. Using these modules to run Python files is equivalent to running a Python script on the shell/terminal. The general syntax used is

os.system("python3 /path/to/script/to/execute")
subprocess.run(["python3", "/path/to/script/to/execute"])

Lưu ý: Nếu bạn đã cài đặt Python 2 và Python 3 trên máy tính của bạn và muốn chạy Python 2 chỉ định điều đó. If you have Python 2 and Python 3 installed on your computer and want to run Python 2 specify that.

Bây giờ, hãy để các mã sau trong RunScript1.Py và sử dụng nó để thực thi Script1.pyrunScript1.pyand use it to execute script1.py

runScript1.py:

print("###os module###")
import os
os.system("python3 /home/kiprono/Desktop/test1/script1.py")
print("###subprocess package###")
import subprocess
subprocess.run(["python3", "/home/kiprono/Desktop/test1/script1.py"])

Sau khi bạn chạy tập lệnh, bạn sẽ nhận được tin nhắn này:

Output:

###os module###
7+5 is equal to 12
3*5 is equal to 15
###subprocess package###
7+5 is equal to 12
3*5 is equal to 15

Lưu ý rằng mã trong __name__ == ‘__main__, trong script1.py được thực thi. Điều này là do chúng tôi chạy tập lệnh từ RunScript1.py dưới dạng tập lệnh thông thường. Để làm cho các đường dẫn ngắn hơn, bạn cũng có thể sử dụng os.chdir () để thay đổi thư mục làm việc hiện tại (điều này tương đương với việc sử dụng CD trong dòng lệnh) và sau đó chỉ chuyển tên tập lệnh như hiển thị bên dướios.chdir() to change the current working directory (this is equivalent to using cd in the command line) and then pass the script names only as shown below

runScript1.py:

import os
print("####os####")
#change current working directory
os.chdir("/home/kiprono/Desktop/test1/")
# run script1.py using os module
os.system("python script1.py")

# run script1.py using subprocess module
import subprocess
print("####subprocess####")
subprocess.run(["python", "script1.py"])

Chạy mã.

Output:

####os####
7+5 is equal to 12
3*5 is equal to 15
####subprocess####
7+5 is equal to 12
3*5 is equal to 15

Chạy tập lệnh Python trong một thư mục khác dưới dạng mô -đun

Bất cứ khi nào bạn nhập một mô -đun (ví dụ, chỉ là một tệp phyton) trong Python bằng cách viết Module Module1, ví dụ, trình thông dịch sẽ tìm mô -đun1.py ở những nơi sau.import module1“, for example, the interpreter will look for module1.py in the following places.

  • Thư mục làm việc hiện tại - vị trí của tập lệnh nhập mô -đun1,current working directory – the location of the script importing module1,
  • Danh sách các thư mục được đặt trên biến môi trường Pythonpath. Chúng tôi có thể thêm các thư mục vào danh sách này bất cứ khi nào chúng tôi muốn (điều này sẽ sớm có ý nghĩa).PYTHONPATH environment variable. We can add folders to this list whenever we want (this will make sense shortly).
  • Các thư mục được cấu hình tại cài đặt Python..

Nếu bạn cố gắng nhập một mô -đun không có sẵn ở các vị trí trên, Python sẽ ném modulenotfounderror.

Chúng tôi có thể sử dụng gói SYS để kiểm tra và sửa đổi các thư mục để tìm kiếm. Sys.Path hiển thị một danh sách các thư mục mà các thông dịch viên Python tìm kiếm bất cứ khi nào một mô -đun đang được nhập.

runScript1.py:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
0

Chạy tập lệnh.

Output:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
1

Đó là những thư mục Python sẽ tìm kiếm bất cứ khi nào bạn nhập các mô -đun. Theo mặc định, thư mục hiện tại cũng được tìm kiếm.

Trong trường hợp của chúng tôi, đó là yếu tố đầu tiên của danh sách (đó là nơi đặt RunScript1.py). Nếu chúng tôi cố gắng nhập module1.py, tại thời điểm này, chúng tôi sẽ nhận được modulenotfounderror vì thư mục chứa nó (‘/home/kiprono/desktop/test1,) không phải là một phần của sys.path.

Do đó, chúng ta phải học cách thêm một đường dẫn đến môi trường Python.

Thêm một con đường vào môi trường Python

Có hai phương pháp - sử dụng mô -đun SYS hoặc chỉnh sửa các biến môi trường Python một cách rõ ràng (chúng ta sẽ thấy cách thực hiện điều này trong Linux, Mac và Windows).using the sys module or editing Python environment variables explicitly (we will see how to do this in Linux, Mac, and Windows).

Phương pháp 1: Sử dụng gói SYS

Hàm sys.path.append () cho phép chúng ta thêm một đường dẫn vào môi trường. Hãy để sử dụng nó để thêm ‘/home/kiprono/desktop/test1, sau đó chúng ta có thể nhập tập lệnh mô -đun1.py dưới dạng mô -đun Python hợp lệ.

runScript1.py:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
2

Chạy tập lệnh.

Output:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
3

Đó là những thư mục Python sẽ tìm kiếm bất cứ khi nào bạn nhập các mô -đun. Theo mặc định, thư mục hiện tại cũng được tìm kiếm., ‘/home/kiprono/Desktop/test1‘ has been added to the list of directories the interpreter will search, and therefore, we can import module1 and then load the BasicOperations() class. As said earlier, since module1.py is executed as a module, the code under __name__ == ‘__main__’ is not executed.

Trong trường hợp của chúng tôi, đó là yếu tố đầu tiên của danh sách (đó là nơi đặt RunScript1.py). Nếu chúng tôi cố gắng nhập module1.py, tại thời điểm này, chúng tôi sẽ nhận được modulenotfounderror vì thư mục chứa nó (‘/home/kiprono/desktop/test1,) không phải là một phần của sys.path.

Do đó, chúng ta phải học cách thêm một đường dẫn đến môi trường Python.

Thêm một con đường vào môi trường Python

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
4

Có hai phương pháp - sử dụng mô -đun SYS hoặc chỉnh sửa các biến môi trường Python một cách rõ ràng (chúng ta sẽ thấy cách thực hiện điều này trong Linux, Mac và Windows).

Phương pháp 1: Sử dụng gói SYS (the file should be in the home folder(~)) and add the following line to the file:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
5

Hàm sys.path.append () cho phép chúng ta thêm một đường dẫn vào môi trường. Hãy để sử dụng nó để thêm ‘/home/kiprono/desktop/test1, sau đó chúng ta có thể nhập tập lệnh mô -đun1.py dưới dạng mô -đun Python hợp lệ., you can run the following command on the terminal to append the line:

Linux::

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
6

macOS::

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
7

Như bạn có thể thấy, ‘/home/kiprono/desktop/test1 đã được thêm vào danh sách các thư mục mà trình thông dịch sẽ tìm kiếm, và do đó, chúng tôi có thể nhập module1 và sau đó tải lớp BasicOperations (). Như đã nói trước đó, vì module1.py được thực thi dưới dạng mô -đun, mã trong __name__ == ‘__main__, không được thực thi.

runScript1.py:

Mỗi khi chúng tôi bắt đầu một tập lệnh Python khác và cần nhập các mô -đun, chúng tôi phải nối các thư mục để tìm kiếm. Để tránh phải làm điều này, chúng ta có thể thêm (các) đường dẫn vào biến môi trường. Chúng ta sẽ thấy cách làm điều đó trong Linux, MacOS và Windows.
Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?
Figure 2: Running the script before and after adding the path into the environment.

Phương pháp 2A: Thêm đường dẫn vào biến môi trường (trên Linux và Mac)runScript1.py was executed with no error.

Bạn có thể thêm nhiều đường dẫn bằng dòng:

mydir = os.getcwd() # would be the same path as a.py
mydir_new = os.chdir(mydir+"\\testA")
9

Nếu bạn muốn xóa một đường dẫn (giả sử Dir2), bạn có thể chạy lệnh sau hoặc xóa đường dẫn trên tệp .profile:

MAIN # main folder with unedited files and both a.py and b.py scripts
|
| (execute a.py)
|
--------testA # first folder created with first edits of files
         |
         | (execute b.py)
         |
         --------------testB # final folder created with final edits of files
0

Phương pháp 2b: Thêm đường dẫn vào biến môi trường (trên Windows)

Đối với Windows (sử dụng Windows 11), hãy làm theo các bước sau:

  1. Mở hộp thoại chạy bằng cách nhấp vào Windows Key + R,Windows Key + R,
  2. Nhập sysdm.cpl và nhấp vào Enter. Điều này sẽ mở cửa sổ Thuộc tính hệ thống. Chuyển đến tab nâng cao và nhấp vào các biến môi trường ở phía dưới. sysdm.cpl and click Enter. This should open the System Properties window. Go to the Advanced tab and click on Environment Variables at the bottom.
Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?
  1. Để làm cho đường dẫn có thể nhận ra bởi các ứng dụng khôn ngoan hệ thống, chúng tôi sẽ thêm đường dẫn vào các biến hệ thống.System Variables.
Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?
  1. Nhấp vào mới hoặc chỉnh sửa. Một tên biến có thể là bất cứ điều gì nhưng giá trị biến phải là đường dẫn bạn muốn thêm. Trong trường hợp của tôi: C: \ Users \ Kipro \ OneDrive \ Desktop \ Run_File \ Test1. A variable name can be anything but the variable value should be the path you wish to add. In my case: C:\Users\kipro\OneDrive\Desktop\run_file\test1
Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?
  1. Sau khi chỉnh sửa xong, bấm OK trên cửa sổ biến hệ thống mới và OK trên cửa sổ Biến môi trường., click OK on the New System variable window and OK on the Environment variables window.
  2. Bây giờ, bạn có thể cần phải khởi động lại shell/thiết bị đầu cuối hoặc trình chỉnh sửa mã bạn đang sử dụng để thay đổi để có hiệu lực.you may need to restart the Shell/terminal or the code editor you are using for changes to take effect.

Hướng dẫn how do i run a python script from another directory? - làm cách nào để chạy một tập lệnh python từ một thư mục khác?

Tôi có thể chạy Python từ bất kỳ thư mục nào không?

Để có thể chạy tập lệnh, bất kể bạn đang tham gia thư mục nào: Di chuyển tập lệnh vào một thư mục được liệt kê bên trong biến môi trường đường dẫn $Điều đó cho biến đường dẫn.move the script into a directory listed inside the $PATH environment variable, like /usr/local/bin , or make a directory ad-hoc for your scripts and add that dir to the PATH variable.

Làm cách nào để đi đến một thư mục cụ thể trong Python?

Để tìm thư mục làm việc hiện tại trong Python, hãy sử dụng os.getcwd () và để thay đổi thư mục làm việc hiện tại, hãy sử dụng hệ điều hành.Chdir (đường dẫn).os. getcwd() , and to change the current working directory, use os. chdir(path) .

Chúng ta có thể chạy một tệp python từ một tệp khác không?

Làm cách nào để chạy một tệp python từ một tệp python khác?Sử dụng câu lệnh nhập để chạy tập lệnh Python trong một tập lệnh Python khác.Sử dụng phương thức ExecFile () để chạy tập lệnh Python trong một tập lệnh Python khác.Sử dụng mô -đun phụ để chạy tập lệnh Python trong một tập lệnh Python khác.Use the import Statement to Run a Python Script in Another Python Script. Use the execfile() Method to Run a Python Script in Another Python Script. Use the subprocess Module to Run a Python Script in Another Python Script.