Python ClearCase下载Vobs Popen密码BASH程序

Python ClearCase下载Vobs Popen密码BASH程序,python,subprocess,clearcase,popen,cleartool,Python,Subprocess,Clearcase,Popen,Cleartool,我昨天编写了这个程序,除了由CRON运行外,它实际上还在工作。今天,我运行了相同的脚本,但它不起作用。脚本将在没有任何回溯错误的情况下运行,它将从ClearCase视图复制顶部文件夹(vob),但目标文件夹下的文件夹和文件中没有实际的重要数据 这是我的Python脚本 def obtainCode(view="My_VIEW", folder="/my_folder"): """Download code from ClearCase's File System and put it o

我昨天编写了这个程序,除了由CRON运行外,它实际上还在工作。今天,我运行了相同的脚本,但它不起作用。脚本将在没有任何回溯错误的情况下运行,它将从ClearCase视图复制顶部文件夹(vob),但目标文件夹下的文件夹和文件中没有实际的重要数据

这是我的Python脚本

def obtainCode(view="My_VIEW", folder="/my_folder"):
    """Download code from ClearCase's File System and put it on the hard-drive"""

    dest = '/etc/foo'
    password = 'passwords'

    v1 = subprocess.Popen(['cleartool', 'setview', view], shell=True, stdout=subprocess.PIPE)
    print "v1 = ", v1
    print "view maybe set :/"

    c1 = subprocess.Popen(['sudo', '-p', '', '-S', 'cp', '-r', folder, dest], stdin=subprocess.PIPE)
    c1.stdin.write(password + '\n')
    c1.stdin.close()
    c1.wait()

    #### Close View and Stop Processes ####
    v2 = subprocess.Popen(['cleartool', 'endview', view], shell=True, stdin=v1.stdout, stdout=subprocess.PIPE)


    v2.kill()
    v1.kill()
有谁知道: 1) 出了什么问题2)为什么昨天可以,但今天不行3)有更好的方法吗


谢谢你的时间和关注

尽量不要使用
setview

您不需要它,可以改为使用视图的完整路径

cleartool startview yourDynamicView
cd /view/yourDynamicView/vobs/yourVob
我以前提到过使用setview(“”)的危险。

它在您的子流程中创建一个子流程,此处不需要该子流程。

我在
dest
位置看到了
文件夹
变量的名称,但在此文件夹下没有我想要的实际数据。这是昨天的工作,但是复制了
文件夹下的所有重要内容。是的。当我从BASH运行它时,我在一个ClearCase视图中运行
sudo cp-r/my_data/etc/foo
,它将所有内容递归地复制到目标位置。那么这个Python在您的系统上工作?我想知道我之前是否在尝试调整CRON.interest时弄乱了环境变量。感谢您的反馈。我在
$HOME
中创建了一些文件夹,并试图使用交互式Python shell中的上述命令将它们复制到其他地方,但我收到了此回溯错误:
IOError:[Errno 32]断管
::我想我可以尝试
shutil
模块,看看是否能获得更好的结果。请看我的更新上面。问题可能与ClearCase交互。我认为这是因为我在桌面上创建了一些文件夹,并编写了一个脚本将它们复制到系统文件夹中,这样做很有效,所以我认为这不再是问题所在。我应该硬编码动态视图吗?我不知道视图的完整路径。@user3870315无需硬编码。只要知道动态视图的名称,就可以构建该视图的完整路径。不需要setview。谢谢您的帮助。我想我找到了通往风景的完整路径。我将通过编写一些代码来进行试验,看看这是否有效。再次感谢你DI注意到所有视图似乎都在
/view
目录下。记住这一点,为什么我需要使用
startview
命令?@user3870315实际上不需要使用setview。