使用系统模块

时间:2018-03-20 16:19:33

标签: python

我正在尝试开发一个与salesforcedxbamboo互动的脚本。我想编写一个简单的python脚本来运行每个cli命令并在每次调用后运行退出代码。例如

import os

path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
        auth = "sfdx force:auth:jwt:grant --clientid clientidexample --jwtkeyfile /root/server.key --username username@example.org --setalias Alias --setdefaultdevhubusername; echo $?" 

os.chdir(path)
os.system(auth)

我得到了这样的结果

Successfully authorized username@example.org with org ID 234582038957
0<< exit code 0 or could 1 or 100

我希望能够运行IF语句(如果可能),以便在弹出除0退出代码之外的任何数字时停止脚本。请记住,我的脚本将使用Saleforce cli命令进行多次调用,希望所有这些命令都会导致0,但是为了防止其中一次调用失败,我需要一些停止脚本的方法。非常感谢任何建议或帮助!

2 个答案:

答案 0 :(得分:1)

import subprocess

path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
users = {
    'username@example.org': 'Alias',
    'other@example.org': 'Other Alias'
}

for username, alias in users.iteritems():
    auth = ['sfdx', 'force:auth:jwt:grant',
            '--clientid', 'clientidexample',
            '--jwtkeyfile', '/root/server.key',
            '--username', username,
            '--setalias', alias,
            '--setdefaultdevhubusername']
    status = subprocess.call(auth, cwd=path)
    if status != 0:
        print("Argument list %r failed with exit status %r" % (auth, status))

...将自动停止任何非零退出代码。如果您不想自己进行比较,可以使用subprocess.check_call()并依赖于抛出的CalledProcessError。

社区Wiki,因为这与许多关于该主题的许多问题重复。

答案 1 :(得分:0)

这是我的最终代码,基于此处的建议和其他一些文章。

#!/usr/bin/python3
import subprocess
import os
import sys

path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
sfdx = 'sfdx'
auth_key= (os.environ['AUTH_KEY'])  ### environment variable

def auth():
    username="username@example.org"
    alias="somealias"
    key="server.key"
    command="force:auth:jwt:grant"
    auth= [ sfdx, command,
            '--clientid', auth_key,
            '--jwtkeyfile', key,
            '--username', username,
            '--setalias', alias,
            '--setdefaultdevhubusername']
    status = subprocess.call(auth, cwd=path)
    if status != 0:
        raise ValueError("Argument list %r failed with exit status %r" % (auth, status))
    elif status == 0:
        print("auth passed with exit code %r" % (status))
auth ()