执行os.chdir后再用subprocess.Popen还是在os.chdir的那个文件夹下调用吗
时间: 2024-05-29 17:12:46 浏览: 173
在使用`subprocess.Popen`时,它将在当前的工作目录中启动新的进程。如果在调用`subprocess.Popen`之前使用`os.chdir`更改了当前的工作目录,则新进程将在更改后的工作目录中启动。因此,`subprocess.Popen`将在`os.chdir`更改后的文件夹中调用。
相关问题
def plot(self): self.is_running = False pwd_path = os.path.abspath(os.path.join(os.getcwd(), "..")) script_path = os.path.join(pwd_path, 'callisto-test-tool\\algo_galileo_2e235eb933c9_deg90\\An_test') folder_path = os.path.join(pwd_path, 'callisto-test-tool\\source\\Test_Source_Data') os.chdir(script_path) os.system('powershell -Command "./csv_output.sh {0}"'.format(folder_path)) 怎么检测该段程序中powershell是否运行完毕
要检测该段程序中 `powershell` 是否运行完毕,可以使用 Python 的 `subprocess` 模块来代替 `os.system` 函数来运行 `powershell`,并使用 `communicate()` 方法来等待 `powershell` 进程结束。例如:
```
import subprocess
def plot(self):
self.is_running = False
pwd_path = os.path.abspath(os.path.join(os.getcwd(), ".."))
script_path = os.path.join(pwd_path, 'callisto-test-tool\\algo_galileo_2e235eb933c9_deg90\\An_test')
folder_path = os.path.join(pwd_path, 'callisto-test-tool\\source\\Test_Source_Data')
os.chdir(script_path)
cmd = 'powershell -Command "./csv_output.sh {0}"'.format(folder_path)
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate() # 等待进程结束
if process.returncode == 0:
print('程序执行成功!')
else:
print('程序执行失败!')
```
这样就可以在程序执行完成后得到 `powershell` 进程的返回值,并根据返回值来判断程序是否执行成功。如果返回值为 0,则表示程序执行成功,否则表示程序执行失败。
python使用subprocess.popen,在列表path为工作路径中,依次执行d盘test文件夹中的x.exe执行程序并实时输出后台信息,如果某次执行异常停止,直接开始执行下一次,并监控每一次运行的性能峰值及总耗时,将监控到的信息输出到d盘result文件夹中并依次命名为1-10.txt
您好,以下是我的回答:
首先需要导入subprocess库,然后在代码中将路径设置为d盘test文件夹的路径,同时创建result文件夹。
接下来,可以通过一个for循环来依次执行x.exe程序,并实时输出后台信息。如果某一次执行异常停止,我们可以利用try...except语句来捕获异常并直接开始执行下一次。
在每次执行完成后,我们可以利用time库来记录每次运行的性能峰值及总耗时,并将监控到的信息输出到d盘result文件夹中并依次命名为1-10.txt。
以下是可能的Python代码示例:
```python
import subprocess
import time
import os
# 将路径设置为d盘test文件夹的路径
path = 'D:\\test'
os.chdir(path)
# 创建result文件夹
if not os.path.exists('D:\\result'):
os.mkdir('D:\\result')
# 依次执行x.exe程序
for i in range(1, 11):
try:
# 开始执行x.exe程序
start_time = time.time()
process = subprocess.Popen(['x.exe'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
# 实时输出后台信息
output = process.stdout.readline()
if output == b'' and process.poll() is not None:
break
if output:
print(output.strip())
success = True
except Exception as e:
print('第 %d 次执行异常: %s' % (i, e))
success = False
# 获取耗时及性能峰值
end_time = time.time()
duration = end_time - start_time
peak_memory = resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
# 将监控到的信息输出到d盘result文件夹中
if success:
with open('D:\\result\\%d.txt' % i, 'w') as f:
f.write('第 %d 次执行成功,耗时:%f秒,性能峰值:%fMB' % (i, duration, peak_memory))
else:
with open('D:\\result\\%d.txt' % i, 'w') as f:
f.write('第 %d 次执行失败' % i)
```
希望这个回答能满足您的需求。如果您还有其他问题,欢迎继续提出。
阅读全文