有没有办法打开文件进行读写?
作为一种解决方法,我打开文件进行写入,关闭它,然后再次打开它进行读取.但是,有没有办法打开一个文件都阅读和写作?
我有一个python脚本(myscript.py)如下:
#!/bin/python
import os
import optparse
import subprocess
import sys
sys.stdout.flush()
print("I can see this message on Jenkins console output")
cmd="sshpass -p 'xxx' ssh test@testmachine 'cmd /c cd C:\stage && test.bat'"
retval=subprocess.call(cmd,shell=True)
print retval
Run Code Online (Sandbox Code Playgroud)
在jenkins中,我有一个执行shell的工作如下:
#!/bin/sh
./myscript.py
Run Code Online (Sandbox Code Playgroud)
问题: Jenkins控制台只显示"我可以在Jenkins控制台输出上看到此消息".如果子进程调用有任何输出,则不会在控制台上打印出来.
如果我把putty添加到服务器A并在shell上运行相同的命令(./myscript.py),我可以看到子进程调用的输出.
如何在Jenkins控制台上打印此子进程调用输出?
仅供参考:正如您从我的命令中看到的那样,子进程调用正在Windows上运行批处理文件; Jenkins在Linux上运行; 两台机器之间有ssh设置..
编辑: 我的test.bat看起来像这样:
echo off
RMDIR /S /Q C:\Test
IF %ERRORLEVEL% NEQ 0 (
ECHO Could not delete
EXIT /b %ERRORLEVEL%
)
Run Code Online (Sandbox Code Playgroud)
如果我在Windows服务器上本地运行这个批处理文件,它返回1(因为我在Test文件夹中打开一个文件)
但是当python脚本使用子进程调用调用这个批处理文件时,我得到的只是一个Zero for retval.
这是为什么以及如何解决这个问题?如果我能捕获正确的retval,我可以让Jenkins的工作失败.
编辑12/12:Helllo !! 任何人!有人!救命!
如何打开一个文件进行读写,也被截断为0?
我试过了:
f = open(PATH, 'w+')
Run Code Online (Sandbox Code Playgroud)
但是,我无法从文件中读取(f.read()返回空字符串).
也:
f = os.fdopen(os.open(PATH, os.O_RDWR | os.O_TRUNC), 'r+')
Run Code Online (Sandbox Code Playgroud)
与前面的代码相同.