<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Python%2FFabric2</id>
	<title>Python/Fabric2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Python%2FFabric2"/>
	<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Python/Fabric2&amp;action=history"/>
	<updated>2026-05-07T04:25:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://aznot.com/index.php?title=Python/Fabric2&amp;diff=6409&amp;oldid=prev</id>
		<title>Kenneth: /* Sudo */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Python/Fabric2&amp;diff=6409&amp;oldid=prev"/>
		<updated>2023-08-20T01:13:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Sudo&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Fabric 2 ==&lt;br /&gt;
&lt;br /&gt;
 https://www.fabfile.org/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from fabric import Connection&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; result = Connection(&amp;#039;web1.example.com&amp;#039;).run(&amp;#039;uname -s&amp;#039;, hide=True)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; msg = &amp;quot;Ran {0.command!r} on {0.connection.host}, got stdout:\n{0.stdout}&amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(msg.format(result))&lt;br /&gt;
Ran &amp;#039;uname -s&amp;#039; on web1.example.com, got stdout:&lt;br /&gt;
Linux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Basic install:&lt;br /&gt;
 pip install fabric&lt;br /&gt;
&lt;br /&gt;
To not conflict with v1 (have both installed):&lt;br /&gt;
 pip3 install fabric2&lt;br /&gt;
&lt;br /&gt;
== Basic Connection ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import fabric2&lt;br /&gt;
&lt;br /&gt;
cn = fabric2.Connection(&amp;#039;user@somesystem&amp;#039;)&lt;br /&gt;
cn.config.run.warn=True  # don&amp;#039;t abort on failure&lt;br /&gt;
cn.run(&amp;#039;hostname&amp;#039;)  # remote execution&lt;br /&gt;
cn.local(&amp;#039;hostname&amp;#039;)  # local execution&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Specify Password and Port ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    conn = Connection(&lt;br /&gt;
    &amp;quot;{username}@{ip}:{port}&amp;quot;.format(&lt;br /&gt;
        username=username,&lt;br /&gt;
        ip=ip,&lt;br /&gt;
        port=port,&lt;br /&gt;
        ),&lt;br /&gt;
    connect_kwargs={&amp;quot;password&amp;quot;: password},&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ref: [https://stackoverflow.com/questions/2339735/fabric-password]&lt;br /&gt;
&lt;br /&gt;
== Don&amp;#039;t throw exception of failure ==&lt;br /&gt;
&lt;br /&gt;
 # Fabric runner connection to Crashbox&lt;br /&gt;
 self.crashbox = fabric2.Connection(f&amp;quot;{self.crashboxuser}@{self.crashboxip}:{self.sshport}&amp;quot;, connect_kwargs={&amp;quot;password&amp;quot;: self.crashboxpass})&lt;br /&gt;
 self.crashbox.config.run.warn = True&lt;br /&gt;
 self.crashbox.config.run.echo = True&lt;br /&gt;
&lt;br /&gt;
== run ==&lt;br /&gt;
&lt;br /&gt;
 f = fabric2.Connection(&amp;#039;localhost&amp;#039;)&lt;br /&gt;
 f.run(&amp;#039;ls&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
 # handle a non 0 return code, if run.warn&lt;br /&gt;
 if f.run(cmd).failed:&lt;br /&gt;
   print(&amp;quot;failure&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 # timeout&lt;br /&gt;
 f.run(cmd, timeout=seconds)&lt;br /&gt;
   # throws invoke.exceptions.CommandTimedOut&lt;br /&gt;
&lt;br /&gt;
Interesting Parameters:&lt;br /&gt;
 echo=False  # print command to local stdout?&lt;br /&gt;
 timeout=seconds  # timeout command - default no timeout&lt;br /&gt;
 shell=&amp;#039;/bin/bash&amp;#039;&lt;br /&gt;
 warn=False # warn and continue or raise UnexpectedExit on non zero return code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ref: [https://docs.fabfile.org/en/stable/api/connection.html] [https://docs.pyinvoke.org/en/latest/api/runners.html#invoke.runners.Runner.run]&lt;br /&gt;
&lt;br /&gt;
== CD ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
con = fabric2.Connection(&amp;#039;localhost&amp;#039;)&lt;br /&gt;
with con.cd(&amp;#039;/etc&amp;#039;):&lt;br /&gt;
  con.run(&amp;#039;pwd&amp;#039;)  # should display /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ref: [https://stackoverflow.com/questions/50834162/in-fabric-2-invoke-change-directory-and-use-sudo]&lt;br /&gt;
&lt;br /&gt;
== Sudo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
con = fabric2.Connection(&amp;#039;localhost&amp;#039;)&lt;br /&gt;
con.sudo(&amp;#039;mkdir /test&amp;#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interesting parameters:&lt;br /&gt;
 Should be the same as sudo.run?&lt;br /&gt;
&lt;br /&gt;
ref: [https://docs.fabfile.org/en/stable/api/connection.html] [https://docs.pyinvoke.org/en/latest/api/context.html#invoke.context.Context.sudo]&lt;br /&gt;
&lt;br /&gt;
== Put ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
con = fabric2.Connection(&amp;#039;localhost&amp;#039;)&lt;br /&gt;
con.put(&amp;#039;test.txt&amp;#039;, &amp;quot;/tmp/test.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== keywords ==&lt;br /&gt;
&lt;br /&gt;
Python Fabric Fabric2 Paramiko&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
</feed>