运行 一个 python 来自另一个脚本的脚本,其命令行参数中包含可执行文件
Running one python script from another script with command line argument having executable in it
我正在尝试在另一个 python 脚本中 运行 一个 python 脚本。这将 运行 10 次并产生 10 个输出。
我想运行program1.py
里面program2.py
。现在我的 program1.py
最初在其中包含一个 C 可执行文件,它需要 1 个命令行参数。
program1.py
如下所示:
import os
import sys
dataset = sys.argv[1]
os.system(f"/home/Dev/c4.5 -u -f {dataset}")
os.system(f"/home/Dev/c4.5rules -u -f {dataset}")
os.system(f"/home/Dev/c4.5rules -u -f {dataset} > Temp")
f = open('Temp')
# Some code
其中 c4.5 和 c4.5rules 是可执行文件的名称。 运行 这个我用的是 python3 program1.py dataset_name
现在我想把这个 program1.py
放在 program2.py
里面,我正在尝试下面的方法:
import os
import subprocess
# Some code
for track in range(0, 10):
with open(f'Train_{track}', 'r') as firstfile, open(f'DF_{track}.data', 'w') as secondfile:
for line in firstfile:
secondfile.write(line)
os.system("/home/Dev/program1.py DF_track")
#subprocess.Popen("/home/Dev/program1.py DF_track", shell=True)
我只想获得 program1.py
的输出 10 次,并希望使用 DF_track
作为每次输出生成的命令行输入。
使用上述方法我遇到了很多错误。请帮助。
Edit_1 :
实际上,每当我尝试 运行 时,我的光标不起作用,它冻结了,因此无法复制错误。
以下是其中一些:
1. attempt to perform an operation not allowed by security policy.
2. syntax error : word expected (expecting ")")
假设我有 2 个文件,第一个文件是 a.py
,另一个是 b.py
,我想从 b.py
.[=21 调用 a.py
=]
a.py的内容是:
print('this is the a.py file')
而b.py的内容是:
import os
stream = os.popen('python3 a.py')
output = stream.read()
print(output)
现在,当我从终端调用 b.py
时,我得到了我期望的输出,即 a.py print statment
user@mos ~ % python3 b.py
this is the a.py file
您也可以使用 subprocess
而不是 os
模块来做到这一点。
这是我在网上找到的一个不错的博客,我从中获得了代码:https://janakiev.com/blog/python-shell-commands/
参见下面的示例。
a.py
def do_something():
pass
b.py
from a import do_something
do_something()
我正在尝试在另一个 python 脚本中 运行 一个 python 脚本。这将 运行 10 次并产生 10 个输出。
我想运行program1.py
里面program2.py
。现在我的 program1.py
最初在其中包含一个 C 可执行文件,它需要 1 个命令行参数。
program1.py
如下所示:
import os
import sys
dataset = sys.argv[1]
os.system(f"/home/Dev/c4.5 -u -f {dataset}")
os.system(f"/home/Dev/c4.5rules -u -f {dataset}")
os.system(f"/home/Dev/c4.5rules -u -f {dataset} > Temp")
f = open('Temp')
# Some code
其中 c4.5 和 c4.5rules 是可执行文件的名称。 运行 这个我用的是 python3 program1.py dataset_name
现在我想把这个 program1.py
放在 program2.py
里面,我正在尝试下面的方法:
import os
import subprocess
# Some code
for track in range(0, 10):
with open(f'Train_{track}', 'r') as firstfile, open(f'DF_{track}.data', 'w') as secondfile:
for line in firstfile:
secondfile.write(line)
os.system("/home/Dev/program1.py DF_track")
#subprocess.Popen("/home/Dev/program1.py DF_track", shell=True)
我只想获得 program1.py
的输出 10 次,并希望使用 DF_track
作为每次输出生成的命令行输入。
使用上述方法我遇到了很多错误。请帮助。
Edit_1 :
实际上,每当我尝试 运行 时,我的光标不起作用,它冻结了,因此无法复制错误。
以下是其中一些:
1. attempt to perform an operation not allowed by security policy.
2. syntax error : word expected (expecting ")")
假设我有 2 个文件,第一个文件是 a.py
,另一个是 b.py
,我想从 b.py
.[=21 调用 a.py
=]
a.py的内容是:
print('this is the a.py file')
而b.py的内容是:
import os
stream = os.popen('python3 a.py')
output = stream.read()
print(output)
现在,当我从终端调用 b.py
时,我得到了我期望的输出,即 a.py print statment
user@mos ~ % python3 b.py
this is the a.py file
您也可以使用 subprocess
而不是 os
模块来做到这一点。
这是我在网上找到的一个不错的博客,我从中获得了代码:https://janakiev.com/blog/python-shell-commands/
参见下面的示例。
a.py
def do_something():
pass
b.py
from a import do_something
do_something()