"""
-from six import StringIO
from io import BytesIO
+from io import StringIO
from collections import defaultdict
import getpass
import signal
def rm_nonascii_chars(var):
- var = var.replace('\xe2\x80\x98', '\'')
- var = var.replace('\xe2\x80\x99', '\'')
+ var = var.replace(b'\xe2\x80\x98', b'\'')
+ var = var.replace(b'\xe2\x80\x99', b'\'')
return var
class LocalRemoteProcess(object):
out, err = self.subproc.communicate()
out, err = rm_nonascii_chars(out), rm_nonascii_chars(err)
- self.stdout.write(out)
- self.stderr.write(err)
+ if isinstance(self.stdout, StringIO):
+ self.stdout.write(out.decode(errors='ignore'))
+ else:
+ self.stdout.write(out)
+ if isinstance(self.stderr, StringIO):
+ self.stderr.write(err.decode(errors='ignore'))
+ else:
+ self.stderr.write(err)
self.exitstatus = self.returncode = self.subproc.returncode
env=env)
if stdin:
- if not isinstance(stdin, six.string_types):
+ if not isinstance(stdin, str):
raise RuntimeError("Can't handle non-string stdins on a vstart cluster")
# Hack: writing to stdin is not deadlock-safe, but it "always" works
# as long as the input buffer is "small"
- subproc.stdin.write(stdin)
+ subproc.stdin.write(stdin.encode())
proc = LocalRemoteProcess(
args, subproc, check_status,
# Tolerate no MDSs or clients running at start
ps_txt = six.ensure_str(remote.run(
- args=["ps", "-u"+str(os.getuid())]
+ args=["ps", "-u"+str(os.getuid())],
+ stdout=StringIO()
).stdout.getvalue().strip())
lines = ps_txt.split("\n")[1:]
for line in lines:
"mds", "allow",
"mon", "allow r"])
- open("./keyring", "a").write(p.stdout.getvalue())
+ open("./keyring", "ab").write(p.stdout.getvalue())
if use_kernel_client:
mount = LocalKernelMount(ctx, test_dir, client_id)